2012-04-27 76 views
1

这是我的脚本的一部分,它打印9和98但未能打印2它表示jQuery中的回调函数未被调用。然而,在此之前,我使用json_decode函数打印从php文件返回的json,并且json打印完全正常。我怎么去调试它,我的意思是哪里可能是错误?未调用jQuery回调

$(document).ready(function() { 
alert(9); 
$('#charac').keyup(function() { 
alert(98); 
    $.getJSON('myprg.php?q='+escape($('#charac').val()), function(data) { 
    alert(2); 
+0

你知道服务器正在返回成功响应吗?首先确认。 – BZink 2012-04-27 21:39:32

+0

你可以用萤火虫进行调试。看看http://michaelsync.net/2007/09/30/firebug-tutorial-script-tab-javascript-debugging的教程,如果你从来没有用萤火虫调试 – 2012-04-27 21:40:41

+0

@BZink:服务器返回一个绝对好的有效JSON (我甚至验证) – 2012-04-27 21:41:56

回答

5

使用$.ajax函数,而不是getJSON和使用错误回调,看看发生了什么事情。

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
    error: callback(jqXHR, textStatus, errorThrown) 
}); 

它也可以检查与萤火虫或Chrome开发者工具的实际服务器的响应,并与JSONLint验证JSON有用,一些JSON库比别人更宽容和忽视小错误。

+0

感谢您的帮助。我用你描述的方法,最后它打印我的状态为200,我用alert(jgXHR.status)打印&比我打印警告(errorThrown),它给了我以下消息:“SyntaxError:JSON.parse:意外字符“ – 2012-04-27 22:47:30

+0

终于解决了这个问题。非常感谢帮助我解决这个问题。 – 2012-04-27 23:06:34

1

这可能不是答案,但代码在这里可视化得更好。

以下内容是否也失败(使用jQuery 1.5或更高版本)?

$(document).ready(function() { 
    alert(9); 
    $('#charac').keyup(function() { 
     alert(98); 
     var jqxhr = $.getJSON('myprg.php?q='+escape($('#charac').val()), function(data) { 
      alert(2); 
     }) 
     .success(function() { alert("second success"); }) 
     .error(function() { alert("error"); }) 
     .complete(function() { alert("complete"); }); 
    }); 
}); 

或者这样:

$(document).ready(function() { 
    alert(9); 
    $('#charac').keyup(function() { 
     alert(98); 
     var jqxhr = $.getJSON('myprg.php?q='+escape($('#charac').val()), function(data) { 
      alert(2); 
     }); 

     jqxhr.success(function() { alert("second success"); }); 
     jqxhr.error(function() { alert("error"); }); 
     jqxhr.complete(function() { alert("complete"); }); 
    }); 
}); 
+0

感谢马里奥的帮助。 Firebug输出:$ .getJSON(“myprg.php?q =”+ escape($(“#charac”).val()),function(data){alert(2);})。error不是函数 [Break On This Error] \t .error(function(){alert(“error”);}) – 2012-04-27 22:00:59

+0

它仍然不会输出2 – 2012-04-27 22:02:23

+0

您正在使用哪个jQuery版本?第二个例子工作吗?我的意思是,你有没有警觉? – 2012-04-27 22:05:49