调试AJAX到PHP调用的最佳方法是什么?

时间:2010-05-17 23:46:05

标签: php javascript ajax

我在我的新项目上调试一个小函数的时间非常糟糕。

基本上我有一个用户通过AJAX调用注册我的服务器上的注销脚本名为“userfFunctions.php”我正在使用AJAX,所以我没有头脑写更多的正则表达式匹配我的mod_rewrites。无论如何,每隔一段时间,似乎我的Post数据就会消失,而且由于PHP在幕后运行,我觉得我无法找到数据流被中断的地方。 BTW此功能在当天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

5 个答案:

答案 0 :(得分:9)

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

我编写它以便它只适用于localhost(出于安全原因),但您可以通过替换以下代码轻松更改它:

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

使用:

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

答案 1 :(得分:8)

尝试使用Firefox的FireBug插件或Chrome中的开发者工具来查看发送的请求。

答案 2 :(得分: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);

答案 3 :(得分:0)

我注意到了:

//<-- redirects to userFunctions.php

当您执行重定向(标题(“位置:”);)时,您将丢失$ _POST和$ _GET数据。 (如果您指的是网址重写(使用mod_rewrite),您应该会收到数据。)

但这并不能解释19小时的症状。

答案 4 :(得分:0)

您可以尝试检查$ _POST数组本身,如下所示:

var_dump($_POST);

查看数组是否完全填充,然后从那里开始工作。 使用firebug,您还可以确认AJAX帖子是否真正发送数据(检查控制台或网络标签)。