在jQuery中使用getJSON函数时,回调函数不起作用

我试图在jQuery中使用getJSON函数来导入一些数据并触发回调函数。 回调函数不运行。 但是,如果我使用get函数尝试相同的操作,它可以正常工作。 奇怪的是,即使我将“json”作为类型传递,它也可以与get函数一起使用。 为什么会这样? 我在Firefox 3和IE 7中测试了以下文件:

   ajax test        $("#test1").click(function() { $.get("index.html", function(response) { alert('hi'); //works } ) }); $("#test2").click(function() { $.getJSON("index.html", function(response) { alert('hi'); //doesn't work } ) }); $("#test3").click(function() { $.get("index.html", function(response) { alert('hi'); //works }, "json" ) });   

无论我访问哪个URL,这似乎都会发生,只要它在同一个域上。 我尝试传递一些数据,这没有什么区别。

当然,我可以通过使用get函数解决问题,就像我在第3次测试函数中所做的那样,但我仍然很好奇为什么会发生这种情况。

我知道这里有一个类似的问题 ,但它没有回答我的问题。

json需要有效,否则回调不会触发。

$ .getJSON()是JSONP,所以改变它:

 $("#test2").click(function() { $.getJSON("index.html?callback=?", function(response) { alert('hi'); } ) }); 

服务器接收的param回调充满了类似:jsonp1291077863309。 在响应中写回回函数jsonp1291077863309(PUT_JSON_HERE)。

对! 经过2天疯狂尝试让$.getJSON接受来自服务器的格式良好的JSon字符串后,问题实际上就在服务器上了! 就像Carl_Platt所说的那样,你必须将收到的回调值作为url参数添加到json输出(PHP中的$_GET['callback'] )。 这就是所谓的“JSON-P输出”,以防万一你想谷歌。

亲自动手,这里是一个用PHP显示解决方案的页面:

http://1080d.com/lang/en-us/2009/10/converting-php-to-jsonp-with-json_encode/

并记住(非常重要)添加到您调用callback=?的urlcallback=? 参数! (仅当您调用的URL不在服务于执行jquery脚本的同一服务器中时才需要)…

JQuery会自动替换’?’ 在将其发送到服务器之前具有方便的值。 您不必担心使用哪个值,它将对您无缝(如果服务器正确的工作!这就是我的问题!):-)

希望能帮助到你!

在表面下,当你调用getJSON ,这就是发生的事情:

 // ~ line 3216 getJSON: function( url, data, callback ) { return jQuery.get(url, data, callback, "json"); }, // ... rest of jQuery core 

所以必须有一些其他东西阻止回调被触发……

我会从每个回调的不同事物(不仅仅是’hi’)开始alert **,这样你知道哪一个失败/成功。

正如许多其他人所提到的,您需要有效的JSON(即符合http://json.org/上的规则)才能使getJSON正常工作(这意味着您无法通过示例中的getJSON获取HTML)。

最后一次测试的原因是因为最后一个参数“json”没有被解释为“类型”。 因为以下不起作用:

 $("#test3").click(function() { $.get("index.html", '', function(response) { alert('hi'); //works }, "json" ) }); 

我有同样的问题,尽管有良好的JSON等。我能够查询我的webservice,并获得响应,但是,我的回调函数没有触发。 在搜索网后,我大多数互联网建议使用’jsonp’,我自从我的应用程序执行一些跨域调用后做了,还添加了’回调?’ 到我的url。 这不起作用,但包括返回JSON的回调解决了我的问题。 下面的代码解释了我的意思:

 //server side json formed somewhere up here String data = callback + "("+ json +")" ; 

由此引起的反应类似于“ jsonp1280403476086([{"Name":"Jack Sparrow “,jQuery似乎没有问题,所以从来没有死在我身上。

希望这可以帮助。

如果您使用$.getJSON$.get ,请在MVC2中使用$.post而不是$.getJSON() ,确保将JsonRequestBehavior设置为AllowGet 。 否则,这将返回HTML错误,导致您的请求不会触发回调。

确保控制器中的JsonResult方法上面没有列出[HttpPost]。 这不会将数据返回到.getJSON调用。