2010-05-17 111 views
10

我在我的新项目上调试一个小函数的时间很可悲。调试AJAX到PHP调用的最佳方式是什么?

本质上我有一个用户通过AJAX调用注销我的服务器上我的退出脚本称为“userfFunctions.php”我使用AJAX,以便我没有写更多的正则表达式头痛匹配我的mod_rewrites。无论如何,每隔一段时间,似乎我的Post数据就会消失,并且由于PHP运行在幕后,所以我觉得我无法找到数据流被中断的位置。顺便说一句这个功能一天工作19小时。

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

php的一面:

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

这里是我真棒响应: alt text http://img517.imageshack.us/img517/6520/screenshot20100517at443.png

回答

8

FirePHP

FirePHP使您可以使用一个简单的PHP 方法调用登录到您的 Firebug的控制台。

所有数据都通过响应标头 发送,并且不会干扰您网页上的 内容。

FirePHP非常适合AJAX 开发,其中需要干净的JSON和XML 响应。

这里是一个简约实现我写道:

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

我写它,以便它只能在本地主机(出于安全原因),但是你可以很容易地通过取代下面的代码更改:

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

有了:

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

非常感谢你!伟大的方法。 – 2010-05-18 00:31:13

+0

@Jascha:没问题,我提供的函数中存在拼写错误 - 现在已修复。 =) – 2010-05-18 01:33:29

8

尝试使用类似Firebug的插件的Firefox,或Chrome中的开发人员工具查看发送的请求。

+3

除firePHP,所以你可以在同一个萤火虫窗口中调试的PHP代码 – Jacob 2010-05-17 23:55:05

+2

Firebug + FirePHP真棒http://firephp.org/ – Shiki 2010-05-17 23:58:14

+0

我不完全确定在头部请求中寻找什么......特别是什么? – 2010-05-18 00:12:47

2

您是否尝试过将dataType设置为"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' 
    }); 
} 

另外,我想你的PHP改成这样:

print_r($_POST); 
+0

我已经尝试过,事实是,我不是真的只是在寻找文本响应,我只是使用响应作为调试方式,在PHP函数中我实际上将null和cookies_destroy删除,然后成功用javascript刷新页面。 – 2010-05-17 23:53:53

0

我注意到:

//<-- redirects to userFunctions.php 

当你做一个重定向(标题( “位置:”); )你会失去你的$ _POST和$ _GET数据。 (如果你指的是URL重写(与mod_rewrite的),你应该接收数据)。

但是,这并不能说明19hr症状。

+0

我感谢你的回复,它实际上是重写而不是重定向。 – 2010-05-18 00:10:22

0

你可以尝试检查$ _POST数组本身,像这样的东西:

var_dump($_POST); 

看看数组甚至被在所有的填充,然后从那里工作。 使用萤火虫,您也可以确认AJAX文章是否真正发送数据(检查控制台或网络标签)。

相关问题