2010-05-17 17 views
10

Mam marny czas na debugowanie jednej małej funkcji w moim nowym projekcie.Jaki jest najlepszy sposób debugowania wywołań AJAX do PHP?

Zasadniczo mam wylogowanie użytkownika za pośrednictwem wywołania AJAX do mojego skryptu wylogowania na moim serwerze o nazwie "userfFunctions.php" Używam AJAX, więc nie mam bólu głowy, pisząc więcej regex do dopasuj moje mod_rewrites. W każdym razie, tak często, wydaje się, że moje dane Post po prostu zgasły i ponieważ PHP działa za kulisami, mam wrażenie, że nie mam możliwości dowiedzenia się, gdzie zakłócony jest przepływ danych. BTW Ta funkcja działa 19 godzin dziennie.

Oto funkcja javascript:

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! 
     } 
    }); 
} 

strona php:

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

tutaj jest mój niesamowite odpowiedź: alt text http://img517.imageshack.us/img517/6520/screenshot20100517at443.png

Odpowiedz

8

FirePHP:

FirePHP pozwala zalogować się do konsoli Firebug pomocą prostego PHP metodę połączenia.

Wszystkie dane są wysyłane za pośrednictwem nagłówków odpowiedzi i nie będą kolidować z zawartością na Twojej stronie.

FirePHP idealnie nadaje się do rozwoju AJAX , w którym wymagane są czyste odpowiedzi JSON i XML .

Oto minimalistyczna realizacja pisałem:

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 . '|'); 
     } 
    } 
} 

Napisałem to tak, że działa tylko na localhost (ze względów bezpieczeństwa), ale można łatwo zmienić poprzez zastąpienie następujący kod:

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

Z:

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

Dziękuję bardzo za to! Świetne podejście. –

+0

@Jascha: Nie ma problemu, wystąpiła literówka w funkcji, którą podałem - jest teraz naprawiona. =) –

8

Spróbuj użyć czegoś jak wtyczki Firebug dla Firefoksa lub Narzędzia dla programistów w przeglądarce Chrome, aby sprawdzić wysyłane żądanie.

+3

oprócz FirePHP, więc możesz debugować kod php w tym samym oknie firebug. – Jacob

+2

Firebug + FirePHP jest niesamowity http://firephp.org/ – Shiki

+0

Nie jestem dokładnie pewien, czego szukać w żądaniu nagłówka ... cokolwiek w szczególności? –

2

Czy próbowałeś ustawić dataType na "text"?

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' 
    }); 
} 

Również chciałbym zmienić PHP do tego:

print_r($_POST); 
+0

Próbowałem tego, prawda jest taka, że ​​tak naprawdę nie szukam tylko odpowiedzi tekstowej, używam tylko odpowiedzi jako sposobu na debugowanie, w funkcji php faktycznie wyłączam ciasteczka i session_destroy, a potem na sukcesie odśwież stronę za pomocą javascript. –

0

zauważyłem:

//<-- redirects to userFunctions.php 

kiedy wykonujesz przekierować (header ("Location:");) stracisz dane $ _POST i $ _GET. (Jeśli masz na myśli url przepisać (z mod_rewrite) należy odbierać dane).

Ale to nie tłumaczy objaw 19hr.

+0

Dziękuję za odpowiedź, w rzeczywistości jest to przepisanie, a nie przekierowanie. –

0

Można spróbować sprawdzenie samej tablicy $ _POST, z czymś takim:

var_dump($_POST); 

Sprawdź, czy tablica jest wypełniana jest nawet w ogóle, a następnie pracować stamtąd. Za pomocą firebuga można również sprawdzić, czy post AJAX rzeczywiście wysyła dane (sprawdź kartę konsoli lub netto).

Powiązane problemy