摘要:尽管存在公共(public)数据并设置回调以启用跨域 JSON,但仍不断获得空响应。请帮忙!
这里已经回答了类似的问题
Using the new facebook graph api, ajax calls returns null (empty)
但我没有使用 jquery,并尝试调整我的代码以反射(reflect)该答案。
我正在尝试使用一个简单的示例来测试简单的 xmlhttprequest 处理程序。我的页面中有此链接:
<a href='javascript:loadXMLDoc(\"https://graph.facebook.com/btaylor?callback=methodname\",\"\")'>AJAX LINK</a>
callback=methodname参数是开启跨域JSON
我正在使用通用 XMLhttprequest 构建器:
var req; // Request object
function loadXMLDoc(url,params){
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.send(params);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.send(params);
}
}
}
然后我就有了一个处理程序:
function processReqChange(){
if (req.readyState == 4) {
if (req.status == 200) {
alert("Done");
} else {
//alert("There was a problem retrieving the data:\n" + req.statusText);
alert("Status Code = "+req.status);
alert("There was a problem retrieving the data:\n");
alert("Failed : object = "+req);
alert(req.responseXML);
alert("Failed : response = "+req.responseText);
alert("Failed : status = "+req.statusText);
}
}else{
}
}
但我不断收到空响应(statusText OK,状态代码 0)。有什么想法吗?
提前致谢
最佳答案
您无法发出跨域ajax请求。查看他们是否支持 JSONP,或者使用他们的 javascript SDK 中的 FB.api 方法 http://developers.facebook.com/docs/reference/javascript/FB.api
编辑:我回复时没有仔细阅读您的帖子。 我看到您将回调名称添加到 ajax 请求中,这不会有任何好处,因为您仍在发出 XHR 请求,因此它仍然会跨域失败。您似乎误解了 JSONP 的工作原理。
通常我只是建议使用像 jQuery 这样的框架来抽象出您不需要重新发明的工作。如果您绝对致力于在不使用 jQuery 的情况下完成此操作,请首先阅读有关 JSONP 工作原理的维基百科文章: http://en.wikipedia.org/wiki/JSON#JSONP
基本思想是:
- 创建一个脚本节点,其中 src 属性看起来就像您现在尝试请求的 URL。
- 服务器将响应如下内容:methodname({"foo": "bar"});而不仅仅是 JSON。由于这是通过脚本节点请求的,因此您的浏览器将执行“methodname”函数并传入结果。
- 实现 methodname(response) 函数来处理响应(即执行您打算在 processReqChange 中执行的工作)
关于javascript - facebook graph api ajax XMLHttpRequest - 空结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304648/