2013-02-25 95 views
0

我有以下的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(" "); 
      }); 
     });  
    }); 

注:页面加载上面的代码是从一个URL像http://lesni.org/some/page,因此同源策略是不是一个问题。

但它似乎没有工作,我不知道为什么。

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

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

它工作正常(向数据库添加记录)。但是ajax代码不起作用。它不会抛出任何错误,或者我不知道它是否会抛出任何错误...

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

+3

使用FireBug或DeveloperTools并检查网络流量 – Philipp 2013-02-25 22:56:26

+1

一个起点是使用'error'回调给你的信息。'error:function(err){alert(err); }''不会给你任何有用的信息,因为['error'回调](http://api.jquery.com/jQuery.ajax/)的第一个参数是jQuery XHR对象。第二和第三个参数更有用。 – 2013-02-25 22:57:02

+0

Btw ..你必须在uri中传递GET参数而不是数据字段 – Philipp 2013-02-25 22:57:34

回答

1

你指定data这样的:

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

当通过data传递一个对象 jQuery的,你需要(或希望)编码。 (你只用一个字符串做。)jQuery为你做。 (如果你确实想编码它,你想要encodeURIComponent,而不是encodeURI)。所以你最终会得到双重编码的实体,因此将不能正常工作。

这应该是:(你也不必绕pid值的括号,但他们是无害的,所以我已经离开他们)

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


但是回答这个问题

How to diagnose AJAX error which is not throwing any error messages?

...你做到这一点

  • 综观任何像样的浏览器的开发工具,网络选项卡,这表明你正是它发送到服务器和它回来。

  • 使用服务器端调试(正确调试或将某些内容倾销到日志中)查看完全是服务器收到的内容。

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

...等等。

+0

我不知道为什么,但它似乎工作。我删除了'encodeURI',它似乎开始工作。谢谢! – Gacek 2013-02-25 23:39:55

+0

@Gacek:可能是双重编码的东西。我很高兴分类! – 2013-02-25 23:40:22