Onkel Schnitzel: AJAX-Anfrage liefert online keinen Response

Nabend,

ich nochmal. Ich wollte gerade ins Bett hüpfen, als ich entdeckt habe, dass mein schönes Script auf dem localhost nach wie vor schniecke funktioniert, aber online plötzlich nicht mehr. Es handelt sich definitiv um die selben Dateien, aber online liefert mir meine AJAX-Anfrage seit neuestem einen leeren Response. Ich probiere nun schon seit zwei Stunden rum und langsam fällt mir nichts mehr ein. Vielleicht hat ja jemand eine Idee. Hier mal das JS-Script stark heruntergebrochen:

  
spielerID = new Array('26');  				  
$.ajax({  
  type: "POST", url:  "ajax/team_spieler_ajax.php",  
  data: {  
    spieler_id_array: JSON.stringify(spielerID),  
  }  
});  

Und hier die gekürzte team_spieler_ajax.php:

  
header("content-type:application/json");  
  
$spieler_id_array = json_decode($_POST['spieler_id_array']);  
  
print_r($spieler_id_array);  

Auf dem localhost bekomme ich das Array mit dem Inhalt '26' als Response, online kommt die Meldung 'This request has no response data available'. Bei den Response-Headern kann ich bis auf die Content-Length die online halt 0 ist und die PHP-Version/Server-Konfiguration keine Unterschiede feststellen.

localhost:
----------------------------------------------------------------
Request URL:http://localhost/......../ajax/team_spieler_ajax.php
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:105
Content-Type:application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
spieler_id_array:["26"]

Response Headersview source
Connection:Keep-Alive
Content-Length:24
Content-Type:application/json
Date:Tue, 11 Feb 2014 02:06:51 GMT
Keep-Alive:timeout=5, max=95
Server:Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
X-Powered-By:PHP/5.4.7

online:
-------------------------------------------------------------------
Request URL:http://fsv-optik.de/......./ajax/team_spieler_ajax.php
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:105
Content-Type:application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
spieler_id_array:["26"]

Response Headersview source
Connection:Keep-Alive
Content-Length:0
Content-Type:application/json
Date:Tue, 11 Feb 2014 02:13:54 GMT
Keep-Alive:timeout=15, max=92
Server:Apache/2.2.16 (Debian) DAV/2 SVN/1.6.12 PHP/5.3.24 mod_ssl/2.2.16 OpenSSL/0.9.8o
X-Powered-By:PHP/5.3.24

Vielleicht kann ja irgendwer helfen...

Gute Nacht erstmal

Onkel Schnitzel

  1. Moin;

    {..] Ich probiere nun schon seit zwei Stunden rum und langsam fällt mir nichts mehr ein. Vielleicht hat ja jemand eine Idee.

    Zum Eingrenzen: Mach den Request mal ohne XHR direkt mit dem Browser, wie sieht da die Response aus?

    Poste mal den URL für Dein Script.

    Horst

    1. Hallo Horst,

      Poste mal den URL für Dein Script.

      Die Seite, bzw. der Relaunch ist noch "geheim". Nächste Woche geht sie wahrscheinlich online, dann gerne ;-)

      Gruß

      Onkel Schnitzel

      1. Hallo,

        Poste mal den URL für Dein Script.
        Die Seite, bzw. der Relaunch ist noch "geheim". Nächste Woche geht sie wahrscheinlich online, dann gerne ;-)

        das heißt, du lädst momentan das Script von einer anderen URL (einem anderen Host) als die per XHR angeforderten Daten? Na dann, kein Wunder. Dann hindert dich die SOP (Same Origin Policy) daran, genau das zu tun. Ein Script darf normalerweise nur mit der Domain interagieren, von der auch das Dokument kam, in dessen Kontext es läuft.

        So long,
         Martin

        --
        Auf jeden Menschen auf der ganzen Welt entfallen statistisch gesehen etwa 3000 Spinnen, wie Wissenschaftler jetzt festgestellt haben.
        Wer will meine haben? Denn ich will sie bstimmt nicht.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo Martin,

          das heißt, du lädst momentan das Script von einer anderen URL (einem anderen Host) als die per XHR angeforderten Daten? Na dann, kein Wunder. Dann hindert dich die SOP (Same Origin Policy) daran, genau das zu tun. Ein Script darf normalerweise nur mit der Domain interagieren, von der auch das Dokument kam, in dessen Kontext es läuft.

          nee, es ist schon die selbe URL. Ich teste das in einem separaten Verzeichnis.

          Gruß

          Onkel Schnitzel

      2. હેલો

        Poste mal den URL für Dein Script.

        Die Seite, bzw. der Relaunch ist noch "geheim". Nächste Woche geht sie wahrscheinlich online, dann gerne ;-)

        Du hast in deinem Ausgangsposting die Domain bereits angegeben, von daher kann es ja garnicht so Geheim sein ;)

        બાય

        --
         .
        ..:
        1. Du hast in deinem Ausgangsposting die Domain bereits angegeben, von daher kann es ja garnicht so Geheim sein ;)

          Die URL an sich ist ja auch nicht geheim, nur der Relaunch ;-)

  2. ich nochmal. Ich wollte gerade ins Bett hüpfen, als ich entdeckt habe, dass mein schönes Script auf dem localhost nach wie vor schniecke funktioniert, aber online plötzlich nicht mehr. Es handelt sich definitiv um die selben Dateien, aber online liefert mir meine AJAX-Anfrage seit neuestem einen leeren Response.

    Dann solltest du die Ausführung des Skriptes auf dem Server unter die Lupe nehmen. Du hast auf dem Server ein Fehlerprotokoll (in das du ja sicher immer zuerst reinschaust), welches du PHP-seitig mit Hilfe von error_log() mit Ablauf- und Debugdaten füllen kannst, wahlweise kannst du auch eine eigene Datei dafür öffnen. Pflastere deinen Code so lange mit error_log()-Aufrufen voll, bis du eingegrenzt hast, wo die empfangenen und eigentlich zurückzusendenden Daten im Nirvana verschwinden.

    Und hier die gekürzte team_spieler_ajax.php:

    header("content-type:application/json");

    $spieler_id_array = json_decode($_POST['spieler_id_array']);

    print_r($spieler_id_array);

      
    … und du hast sicher auch mit \_exakt\_ diesen drei Zeilen den Fehler nachvollziehen können – das Zitat funktionierenden Codes ist nämlich sinnlos.  
      
    Falls diese drei Zeilen den Fehler zeigen, ändere sie folgendermaßen:  
    ~~~php
    error_log($_POST['spieler_id_array']);  
      
    header("content-type:application/json");  
      
    $spieler_id_array = json_decode($_POST['spieler_id_array']);  
      
    print_r($spieler_id_array);  
    echo "blafasel";
    

    Im Fehlerprotokoll _muss_ das Datum erscheinen, welches Du per POST gesendet hast. Ebenso _muss_ das Skript mindestens die acht Bytes "blafasel" ausspucken. Je nach Ergebnis kannst du dann von hier aus weiterprüfen.

    1. Hallo Herr Doktor,

      Du hast auf dem Server ein Fehlerprotokoll (in das du ja sicher immer zuerst reinschaust),

      Ehrlich gesagt tue ich das nicht.

      welches du PHP-seitig mit Hilfe von error_log() mit Ablauf- und Debugdaten füllen kannst, wahlweise kannst du auch eine eigene Datei dafür öffnen.

      Ich habe error_log noch nie benutzt, ich muss zu meiner Schande gestehen, ich kannte das gar nicht. Bisher hab ich mich immer auf error_reporting beschränkt.

      Pflastere deinen Code so lange mit error_log()-Aufrufen voll, bis du eingegrenzt hast, wo die empfangenen und eigentlich zurückzusendenden Daten im Nirvana verschwinden.

      Das habe ich getan und den Übeltäter gefunden. Anscheinend waren auf dem Server noch/wieder magic_quotes aktiviert, wodurch mein $_POST-Inhalt escaped wurde. Nachdem ich jetzt die magic_quotes-Anweisungen zurückgesetzt habe, funktionierts wieder. Ich war zwar der Meinung, dass ich den Server ohnehin schon so eingestellt hatte (das Script hat ja zwischendurch auch schon funktioniert), aber was solls.

      Besten Dank für deine Hilfe! Das war fachlich hilfreich ;-)

      Gruß

      Onkel Schnitzel