如何诊断没有抛出任何错误消息的AJAX错误?

时间:2013-02-25 22:54:38

标签: php javascript jquery ajax

我有以下部分的ajax代码:

$(document).ready(function(){
    $("form input#dodaj").click(function(){
        var s = $("form input#zad").val();
        var str = "<li>"+s+"</li>";
        $.ajax( {
            type: "GET",
            url: "http://lesni.org/kss/dodaj_zadanie.php",
            data: { 
                pid: ($(this).attr('alt')),
                zad: encodeURI(s)},
            error: function( err ){ alert(err); }
                }
             ).done(function(){
                $("ul#zadania").append(str);
                $("form input#zad").val(" ");
            });
        });     
    });

注意:加载上述代码的页面来自http://lesni.org/some/page之类的网址,因此同源策略不是问题。

但它似乎不起作用,我不知道为什么。

它正在调用的PHP文件是正确的。当我在浏览器中手动输入时:

http://lesni.org/kss/dodaj_zadanie.php?pid=1&zad=abc

它正常工作(将记录添加到数据库)。但是ajax代码无效。并且它不会抛出任何错误,或者我不知道它是否会引发任何错误......

所以问题是:如何诊断这部分AJAX代码以了解错误。我也尝试了POST版本,没有效果。

1 个答案:

答案 0 :(得分:1)

您正在指定data,如下所示:

data: { 
    pid: ($(this).attr('alt')),
    zad: encodeURI(s)
}

当您通过data对象传递给jQuery时,需要(或想要)对其进行编码。 (你只用字符串做。)jQuery为你做到了。 (如果 想要对其进行编码,则需要encodeURIComponent,而不是encodeURI)。因此,您最终会得到双重编码的实体,因此无法正常运行。

应该是:

data: { 
    pid: ($(this).attr('alt')),
    zad: s
}

(你也不需要围绕pid值的parens,但它们是无害的,所以我离开了它们。)


但回答这个问题

  

如何诊断没有抛出任何错误消息的AJAX错误?

...你这样做

  • 查看任何体面的浏览器开发工具中的“网络”选项卡,它显示完全它发送给服务器的内容以及它返回的内容。

  • 使用服务器端调试(正确调试,或通过将内容转储到日志中)来查看完全服务器收到的内容。

  • 查看服务器端日志以确保请求了正确的资源。

......等等。