2010-05-22 73 views
0

这是我的代码,JQuery的Ajax响应没有触发成功

$.ajax({ 
      type:"get", 

      //this doesn't work 
      //url:'http://example.com/json.php', 

      //But this works 
      url:'http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?', 

      dataType:"jsonp", 
      success:function(data){ 
       alert('success'); 
      }, 
      error:function(){ 
       alert('error'); 
      } 
}); 

在json.php我

<?php 
header("Content-type: application/javascript"); 
?> 

然后我复制了Flickr的URL的所有输出。所以问题不应该在我的代码的内容中,而应该如何发送。我需要在这里解决什么问题?

在此先感谢!

+0

你说它不起作用,但它有什么作用?什么是从你的PHP页面返回的? – 2010-05-22 09:35:28

+0

哦,没错,它不会返回成功警报或错误信息。我用我的本地服务器也尝试过它,结果也一样。 – Mohammad 2010-05-22 09:47:37

+0

听起来像另一个SO问题在这里:http://stackoverflow.com/questions/2380551/jquery-success-function-not-firing-using-jsonp – sirhc 2010-05-22 10:00:19

回答

3

正如Nick Craver所指出的那样,jQuery调用对于JSONP请求的success回调。

您是否已将回调添加到您的PHP脚本中?

这篇文章请看: http://remysharp.com/2007/10/08/what-is-jsonp/

在你json.php文件,你应该喜欢做一些:

​​3210

由于jQuery的默认JSONP回调callback

这是因为jQuery追加与随机字符串名称的回调(除非您指定其作为选项jsonpCallbackMore information can be found in the documentation. 你不会看到回调追加,因为它不是URL的一部分,它是由jQuery的只加。该$.ajax方法的执行过程中

你可以明白我的意思,试图: http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=myCallBackHandler

如果处理程序不执行,jQuery的不触发成功,并在$.ajax选项中指定完整的处理程序

+2

这是不准确的,jsonp回调只是以不同的方式和地点挂钩,它构造了一个为此自动命名的临时函数。默认情况下,成功函数**是**,这个函数也包括'complete'。 http://github.com/jquery/jquery/blob/master/src/ajax.js#L213 – 2010-05-22 10:14:12

+0

你是对的。我已经更新了我的答案。谢谢,尼克! – sirhc 2010-05-22 10:45:12

+0

嗨sirhc,你太棒了,完美的工作! – Mohammad 2010-05-22 11:27:01

0

一个JSON文件的正确内容类型是:

header('Content-type: application/json'); 

这会有问题吗?

+0

其实我认为正确的类型是Javascript。 – Mohammad 2010-05-22 09:46:52

+0

否 - 官方文档声明它应该是“application/json”。 参见以下内容: - http://www.ietf.org/rfc/rfc4627.txt - http://en.wikipedia.org/wiki/JSON - http://mimeapplication.net/json – 2010-05-22 09:57:53

+0

hmm谢谢,但它不适用于“json”。 – Mohammad 2010-05-22 10:03:10