【问题标题】:Debugging AJAX requests调试 AJAX 请求
【发布时间】:2014-05-18 15:29:32
【问题描述】:

我目前正在尝试找出如何找出我的 php 脚本中的错误。

我做了一个小脚本,故意出错。使用我得到的 chrome 控制台...

Uncaught SyntaxError: Unexpected token < 

但是,通常 PHP 错误会将您指向发生错误的行。

这是我的 AJAX 请求。

var myData = "Hello";

        $.ajax({ 
            type: "GET",
            url: 'test.php',
            datatype: 'json',
            data: { data: myData},
            success: function(output) {
                var result = $.parseJSON(output);
                for(var i=0; i<result.length; i++){
                    console.log(result[i]);
                }
            }
        });

我的 PHP 脚本语法错误

$data = ($_GET['data']);
echoo boom;
echo json_encode(array($data, "test"));

如您所见,第 2 行是错误,但我的控制台中的错误没有给我这样的信息。

谢谢

【问题讨论】:

  • 该错误意味着响应未正确格式化为预期的返回类型。在这种情况下,这意味着您的 JSON 格式不正确。如果您检查 DevTools (F12),您可以在控制台的网络选项卡中看到确切的响应。
  • 谢谢,我从来没有这么详细地查看过控制台,PHP 错误在网络选项卡中

标签: javascript php jquery ajax debugging


【解决方案1】:
$.ajax({ 
    type: "GET",
    url: 'test.php',
    datatype: 'json',
    data: {},
    success: function(output) {
        result = output;
        for(var i=0; i < result.length; i++){
            console.log(result[i]);
        }
    }
});

通过将 dataType 定义为 json,输出已经被解析。再次解析已经解析的“输出”会导致错误。所以这是一个客户端/javascript错误。

还请注意 - 如果发生错误 - 实际的错误消息也会被解析。所以你会得到一个包含来自服务器的“碎片化”错误消息的数组;)

【讨论】:

  • 啊,我明白了。谢谢。
  • 您还可以在 JQuery 处理它之前检查您从服务器获得的响应。检查您的控制台(网络->选择最后一个条目->响应)。如果你在这里看到你的错误,你的客户端有另一个错误
【解决方案2】:

当错误出现在服务器端时,您通常只会在客户端收到非常不具体的错误消息(可能是 500 或服务器错误)。您必须在 Web 服务器上进行调试。一旦我看到这样的错误,我就会检查 Web 服务器的错误日志文件(它将显示编译和运行时错误)。

【讨论】:

  • 我正在使用 Localhost xampp。你知道我如何使用它来做到这一点吗?
  • 我不熟悉那种环境。但是在某个地方你有日志文件。否则,如果您启用了 PHP 的命令行版本,您可以执行 php -l test.php(它只会显示编译错误)。您将需要检查日志文件是否存在运行时错误。
【解决方案3】:

请写:

$data = $_GET['data'];
echo boom;
echo json_encode(array($data, "test"));

代替:

$data = ($_GET['data']);
echoo boom;
echo json_encode(array($data, "test"));

然后写:

$.ajax({
                type: "GET",
                url: "test.php",
                timeout: 6000,
                success: function(data) {


                    json = $.parseJSON(data);

                    for (var i = 0; i <= json.length-120; i++) {


                        console.log(json[i]);


                    }



                }
});

【讨论】:

  • 有什么区别?
  • 我认为你没有理解我的问题。
  • OP 没有询问错误是什么。该错误是有意测试调试工作的。 OP 正在询问如何调试这样的事情以确定不太明显的错误。
  • 这个我知道,我在做测试
【解决方案4】:

使用浏览器中的调试工具。专门寻找用于监控网络请求的选项卡或一组功能。这将在您的 AJAX 中向您显示与服务器之间的实际请求和响应。

这里发生的情况是您的 PHP 代码正在生成一个错误,这会导致向浏览器返回某种 HTML(可能显示错误消息)。但是,看看你对响应做了什么:

var result = $.parseJSON(output);

如果output 是 HTML 而不是 JSON,则此代码将失败并出现错误。由于 JSON 语法不使用 &lt; 但 HTML 使用,我希望您会收到错误:

Uncaught SyntaxError: Unexpected token <

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多