如何使用JSONP查询Facebook Graph API

不应该跟随JQuery工作的AJAX请求吗?

$.getJSON('https://graph.facebook.com/138654562862101/feed?callback=onLoadJSONP'); 

我已经定义了一个名为onLoadJSONP的回调函数。

但Chrome给了我一个典型的Same-Origin-Policy错误:

XMLHttpRequest无法加载https://graph.facebook.com/138654562862101/feed?callback=onLoadJSONP 。 Access-Control-Allow-Origin不允许使用null。

我以为JSONP解决了这个问题,我做错了什么?

jQuery 专门callback=? 检测JSONP所需的行为 callback=? ,所以你需要完全相同 ,然后传递你想要处理的function。 没有外部更改,您可以这样做:

 $.getJSON('https://graph.facebook.com/138654562862101/feed?callback=?', onLoadJSONP); 

这允许搜索callback=? 仍然可以直接使用您的函数作为回调。 以前,它没有检测到您想要JSONP获取,并且正在尝试使用XMLHttpRequest来获取数据…由于相同的源策略限制而失败。

它必须是“回调=?” 然后将回调定义为请求的最后一个参数。

 $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { tags: "cat", tagmode: "any", format: "json" }, function(data) { $.each(data.items, function(i,item){ $("").attr("src", item.media.m).appendTo("#images"); if ( i == 3 ) return false; }); }); 

在进行任何跨域AJAX调用之前,请简单地添加以下JavaScript代码。

 jQuery.support.cors = true; $.ajaxTransport("+*", function( options, originalOptions, jqXHR ) { if(jQuery.browser.msie && window.XDomainRequest) { var xdr; return { send: function( headers, completeCallback ) { // Use Microsoft XDR xdr = new XDomainRequest(); xdr.open("get", options.url); xdr.onload = function() { if(this.contentType.match(/\/xml/)){ var dom = new ActiveXObject("Microsoft.XMLDOM"); dom.async = false; dom.loadXML(this.responseText); completeCallback(200, "success", [dom]); }else{ completeCallback(200, "success", [this.responseText]); } }; xdr.ontimeout = function(){ completeCallback(408, "error", ["The request timed out."]); }; xdr.onerror = function(){ completeCallback(404, "error", ["The requested resource could not be found."]); }; xdr.send(); }, abort: function() { if(xdr)xdr.abort(); } }; } });