2010-05-17 14 views
10

Ich habe eine miserable Zeit, eine kleine Funktion auf meinem neuen Projekt zu debuggen.Was ist der beste Weg, um AJAX zu PHP-Anrufe zu debuggen?

Im Wesentlichen habe ich einen Benutzer abmelden über einen AJAX-Aufruf zu meinem Abmeldeskript auf meinem Server namens "userfFunctions.php" Ich benutze AJAX, so dass ich nicht die Kopfschmerzen haben mehr Regex zu schreiben Finde meine mod_rewrites. Wie auch immer, es scheint, als ob meine Post-Daten einfach ausverkauft sind und da PHP hinter den Kulissen läuft, habe ich das Gefühl, dass ich keine Möglichkeit habe herauszufinden, wo der Datenfluss gestört wird. BTW Diese Funktion arbeitet 19 Stunden am Tag.

Hier ist die Javascript-Funktion ist:

function logOut(){ 
    var data = new Object; 
    data.log_out = true; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.mydomain.com/User_Validator', //<-- redirects to userFunctions.php 
     data: data, 
     success: function(data) { 
     alert(data); // <-- a response is triggered but with no response data! 
     } 
    }); 
} 

die PHP-Seite:

if(isset($_POST['log_out'])){ 
    echo 'alert this!'; 
} 

hier meine super Antwort ist: alt text http://img517.imageshack.us/img517/6520/screenshot20100517at443.png

Antwort

8

FirePHP:

FirePHP ermöglicht es Ihnen, Ihre Firebug-Konsole mit einem einfachen PHP Methodenaufruf loggen sein.

Alle Daten werden über die Antwortheader gesendet und stören nicht den Inhalt auf Ihrer Seite.

FirePHP eignet sich ideal für AJAX Entwicklung, wo saubere JSON und XML Antworten erforderlich sind.Hier

ist eine minimalistische Umsetzung schrieb ich:

function FirePHP($message, $label = null, $type = 'LOG') 
{ 
    static $i = 0; 

    if (headers_sent() === false) 
    { 
     $type = (in_array($type, array('LOG', 'INFO', 'WARN', 'ERROR')) === false) ? 'LOG' : $type; 

     if (($_SERVER['HTTP_HOST'] == 'localhost') && (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false)) 
     { 
      $message = json_encode(array(array('Type' => $type, 'Label' => $label), $message)); 

      if ($i == 0) 
      { 
       header('X-Wf-Protocol-1: http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); 
       header('X-Wf-1-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3'); 
       header('X-Wf-1-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'); 
      } 

      header('X-Wf-1-1-1-' . ++$i . ': ' . strlen($message) . '|' . $message . '|'); 
     } 
    } 
} 

ich es geschrieben habe, so dass es nur auf localhost funktioniert (aus Sicherheitsgründen), aber Sie können leicht ändern, indem Sie den folgenden Code ersetzen:

if (($_SERVER['HTTP_HOST'] == 'localhost') && (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false)) 

mit:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false) 
+0

Vielen Dank dafür! Große Annäherung. –

+0

@Jascha: Kein Problem, es gab einen Tippfehler in der Funktion, die ich zur Verfügung gestellt habe - es ist jetzt behoben. =) –

8

Probieren Sie etwas wie das Firebug-Plugin für Firefox, oder die Entwicklertools in Chrome, um sich die gesendete Anfrage anzusehen.

+3

zusätzlich zu firePHP so können Sie den PHP-Code in der gleichen Firebug-Fenster debuggen – Jacob

+2

Firebug + FirePHP ist genial http://firephp.org/ – Shiki

+0

Ich bin nicht genau sicher, was in der Header-Anfrage zu suchen ... etwas besonderes? –

2

Haben Sie versucht, die dataType auf "text" zu setzen?

function logOut(){ 
    var data = { 
     "log_out" : true 
    }; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.mydomain.com/User_Validator', 
     data: data, 
     success: function(data) { 
      alert(data); 
     }, 
     dataType : 'text' 
    }); 
} 

Außerdem würde ich Ihre PHP dies ändern:

print_r($_POST); 
+0

Ich habe das versucht, die Wahrheit ist, ich bin nicht wirklich nur auf der Suche nach einer Textantwort, ich benutze nur die Antwort als eine Möglichkeit zu debuggen, in der PHP-Funktion, die ich tatsächlich Cookies und session_destroy und dann auf Erfolg Null Aktualisieren Sie die Seite mit Javascript. –

0

Ich bemerkte:

//<-- redirects to userFunctions.php 

Wenn Sie das tun ein umleiten (Header ("Location:");) Sie verlieren Ihre $ _POST und $ _GET Daten. (Wenn Sie auf eine URL mit Bezug umschreiben (mit mod_rewrite) Sie die Daten erhalten soll.)

Aber das erklärt nicht die 19hr Symptom.

+0

ich danke Ihnen für Ihre Antwort, es ist eigentlich eine Neuschreibung und keine Weiterleitung. –

0

könnten Sie versuchen, die $ _POST Array Überprüfung selbst, mit so etwas wie folgt aus:

var_dump($_POST); 

Prüfen Sie, ob das Array überhaupt besiedelt werden und dann von dort aus arbeiten. Mit Firebug können Sie auch bestätigen, ob der AJAX-Post wirklich Daten sendet (überprüfen Sie die Konsolen- oder Netz-Tabs).

Verwandte Themen