Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Moin Moin,

ich soll mich auf Arbeit das erste mal intensiv mit Web - Entwicklung auseinander setzen und Ecke dabei an einige Probleme. Mein Problem ist, dass ich versuche eine Globale Variable nach einer User - Interaktion (Button Click) zu verändern.

Ich stoße dabei allerdings immer wieder auf den Server Fehler 500, die kompletten Exception - Informationen, die ich habe hänge ich weiter unten an, wobei die eigentlich relativ nix sagend sind.

Kurze Anmerkung: Ich habe das Projekt mit dem MVC Pattern versucht zu realisieren, demnach OOP. Als IDE nutze ich Visual Studio mit der PHPTools Erweiterung.

Mein Ajax - Script sieht wie folgt aus:

// Funktion wird über Button aufgerufen und übergibt entsprechende Parms.
function ajx_switchView() {
    CallMethod("GET", 'AJX_Handler.php', 'switchView', onSuccess)
}

/*
 * AJAX BASE 
*/
function CallMethod(type, url, param, successCallback) {
    $.ajax({
        type:       type,
        url:        url,
        data:       { param: param, url: url },
        cache:      false,
        success:    successCallback,
        error:      onError
    })
}

// Erfolgreiche Ausführung.
function onSuccess(response_in) {
    console.log(
        "Server_Response: ", response_in
    );
}

// Gibt Fehlermeldung aus.
function onError(xhr, txtStatus, errThrown) {
    console.log(
        "XMLHttpRequest: ", xhr,
        " Status:", txtStatus,
        " Error:",  errThrown
    );
}

 

Mein Ajax - Handler:

<?php
define('__ROOT__', dirname(dirname(__FILE__) . '\\DMC'));
require_once(__ROOT__ . '\\Controller\\HeaderController.php');

$mHandler = new Handler();
$mHandler->CallMethode();

// Ajax - Handler - Klasse
class Handler {
    private $param = $_POST['param'];

    // Ruft entsprechende Methode für Programmsteuerung auf.
    function CallMethode(){
        switch(self::$param) {
            case 'switchView':
                echo "SwitchView";
                break;
            case 'PLATZHALTER':
                break;
            default:
                echo 'Fehler!';
        }
    }
}
?>

 

Anzumerken sei, dass ich das Ganze erstmal so vereinfacht habe, sprich so wie ich es geposted habe, soll es mir erstmal nur eine Variable zurück geben, mit der ich schauen kann, ob alles richtig funktioniert. Im Produktiven Umfeld werden die Funktionen natürlich auch einen Zweck haben.

Meine momentane Annahme ist, dass die Globale Variable "param" nicht vorhanden ist und es mir deswegen den Fehler auswirft. Doch selbst wenn ich diesen Code ausführe

<?php
 echo "Test"

 // usw...
?>

.. kommt der gleiche Fehler, was meine Theorie entkräftet.

Konsolenausgabe (Error): 

POST http://localhost:57162/AJX_Handler.php 500 (Internal Server Error)
(anonymous) @ VM47:2
send @ jquery.min.js:4
ajax @ jquery.min.js:4
CallMethod @ ajax.js:11
ajx_switchView @ ajax.js:4
onclick @ index.php?XDEBUG_SESSION_START=C2226D1F:36


Object {
readyState: 4, responseText: "", status: 500, statusText: "Internal Server Error"}
abort: (a)always: ()catch: (a)done: ()fail: ()getAllResponseHeaders: ()arguments: (...)caller: (...)length: 0name: "getAllResponseHeaders"
prototype: Object__proto__: ()[[FunctionLocation]]: jquery.min.js:4
[[Scopes]]: Scopes[3]getResponseHeader: (a)overrideMimeType: (a)pipe: ()progress: ()promise: (a)readyState: 4responseText: ""
setRequestHeader: (a,b)state: ()status: 500statusCode: (a)statusText: "Internal Server Error"then: (b,d,e)
__proto__: Object  Status: error  Error: Internal Server Error

Hoffe mir kann jemand helfen, da ich absolut auf dem Schlauch stehe und auch nach mehreren Stunden das Problem bisher noch nicht lösen konnte.

Viele Grüße,
Eric

Du willst einen GET-Request machen, in der Console steht aber "POST ....". Daraus resultiert der internal error, der ja darauf hinweist, dass du etwas aufrufst, was er so nicht verarbeiten kann (was ja stimmt, wenn du den Fall "POST url" nicht mit einer Route abdeckst). 

Das Problem kommt vermutlich daher, dass du $.ajax({....}) mit type: type fütterst, statt mit method: post/get/..., also "method: type" verwenden musst. 

Bearbeitet von pr0gg3r

  • Autor

Danke für eure Antworten.

Zitat

Ich bin etwas raus aus der PHP-Thematik. Aber "früher" war es so dass man nur nutzen konnte, was bereits bekannt war -> deine Klasse wird erst nach der Verwendung deklariert.

Das wars. Habs im Programmeinstiegspunkt per require_once eingebunden und schon geht es. Habe zwar noch keinen respond vom Server, aber das schaff ich jetzt glaube schon. Danke!

 

Zitat

Du willst einen GET-Request machen, in der Console steht aber "POST ....". Daraus resultiert der internal error, der ja darauf hinweist, dass du etwas aufrufst, was er so nicht verarbeiten kann (was ja stimmt, wenn du den Fall "POST url" nicht mit einer Route abdeckst).  ...

Danke für den Tipp. Ich hatte mal zu Debug Zwecken auf POST umgestellt, um zu schauen ob denn das AJAX - Script alles richtig verarbeitet. Hatte dann leider nur den Konsolen - Output von der einen Debug - Session genommen und und vergessen, dass ich es ja in der Weile schon wieder im Code geänder habe.

Kurz gesagt: Mein Fehler. Tut mir leid, dich auf die falsche Spur gelockt zu haben.

Bearbeitet von CAEYO

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.