这是我的代码,
$.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网址的所有输出。所以问题不应该在我的代码的内容中,而是如何发送它。我需要在这里解决什么?
提前致谢!
答案 0 :(得分:3)
jQuery调用JSONP请求的success
回调,正如Nick Craver所指出的那样。
您是否已将回调添加到PHP脚本中?
看看这篇文章: http://remysharp.com/2007/10/08/what-is-jsonp/
在json.php
文件中,您应该执行以下操作:
<?php
$jsonstuff = '{ something: "somethingHere" }';
echo $_GET['callback'] . "(" . $jsonstuff . ")";
?>
由于jQuery中的默认JSONP回调是callback
。
这是因为jQuery会附加一个带有随机字符串名称的回调(除非您在选项中将其指定为jsonpCallback
。More information can be found in the documentation.
您不会看到附加的回调,因为它不是URL的一部分,它仅在执行$.ajax
方法时由jQuery添加。
你可以通过尝试看到我的意思: http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=myCallBackHandler
如果处理程序没有执行,jQuery不会触发$.ajax
选项中指定的成功和完整处理程序。
答案 1 :(得分:0)
JSON文件的正确内容类型是:
header( 'Content-type: application/json' );
这可能是问题吗?