2010-05-17 39 views
10

Estoy teniendo un tiempo miserable depurando una función pequeña en mi nuevo proyecto.¿Cuál es la mejor manera de depurar AJAX para llamar a PHP?

Básicamente estoy haciendo que un usuario cierre la sesión a través de una llamada AJAX a mi script de cierre de sesión en mi servidor llamado "userfFunctions.php" Estoy usando AJAX para no tener el dolor de cabeza de escribir más expresiones regulares para coincide con mis mod_rewrites. De todos modos, de vez en cuando, parece como si mis datos de Post mueren a toda máquina y dado que el PHP se está ejecutando detrás de las escenas, siento que no tengo forma de saber dónde se está interrumpiendo el flujo de datos. Por cierto, esta función funciona las 19 horas del día.

Aquí es la función 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! 
     } 
    }); 
} 

el lado php:

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

aquí está mi respuesta impresionante: alt text http://img517.imageshack.us/img517/6520/screenshot20100517at443.png

Respuesta

8

FirePHP:

FirePHP le permite acceder a su Firebug consola usando un simple PHP método de llamada.

Todos los datos se envían a través de los encabezados de respuesta y no interferirán con el contenido de en su página.

FirePHP es ideal para el desarrollo de AJAX donde se requieren respuestas JSON y XML limpias.

Aquí es una aplicación minimalista escribí:

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

lo escribí para que sólo funciona en el servidor local (por razones de seguridad), pero se puede cambiar fácilmente que sustituyendo el siguiente código:

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

Con:

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

¡Muchas gracias por esto! Gran enfoque. –

+0

@Jascha: No hay problema, había un error tipográfico en la función que proporcioné, está arreglado ahora. =) –

8

Trate de usar algo así como el complemento Firebug para Firefox, o las Herramientas de desarrollador en Chrome, para ver la solicitud que se envía.

+3

además firePHP para que puedas depurar el código php en la misma ventana Firebug – Jacob

+2

Firebug + FirePHP es increíble http://firephp.org/ – Shiki

+0

No estoy seguro de qué buscar en la solicitud de encabezado ... ¿hay algo en particular? –

2

¿Ha intentado configurar el dataType en "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' 
    }); 
} 

Además, me gustaría cambiar de PHP para esto:

print_r($_POST); 
+0

Lo he intentado, la verdad es que no solo estoy buscando una respuesta de texto, solo estoy usando la respuesta como una forma de depuración, en la función php realmente anulo las cookies y el session_destroy y luego el éxito actualizar la página con javascript. –

0

me di cuenta:

//<-- redirects to userFunctions.php 

Cuando haces un redirigir (header ("Location:");) perderá sus datos $ _POST y $ _GET. (Si se refiere a una URL reescribir (con mod_rewrite) que debe recibir los datos.)

Pero esto no explica el síntoma 19hr.

+0

gracias por su respuesta, en realidad es una reescritura y no una redirección. –

0

Usted podría intentar el control de la matriz $ _POST sí, con algo como esto:

var_dump($_POST); 

Ver si la matriz incluso se está poblada en absoluto y luego trabajar desde allí. Usando Firebug, también puede confirmar si la publicación AJAX realmente está enviando datos (consulte la consola o las pestañas de red).

Cuestiones relacionadas