javascript - facebook graph api ajax XMLHttpRequest - 空结果?

标签 javascript ajax json facebook

摘要:尽管存在公共(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

基本思想是:

  1. 创建一个脚本节点,其中 src 属性看起来就像您现在尝试请求的 URL。
  2. 服务器将响应如下内容:methodname({"foo": "bar"});而不仅仅是 JSON。由于这是通过脚本节点请求的,因此您的浏览器将执行“methodname”函数并传入结果。
  3. 实现 methodname(response) 函数来处理响应(即执行您打算在 processReqChange 中执行的工作)

关于javascript - facebook graph api ajax XMLHttpRequest - 空结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304648/

相关文章:

c# - 使用 ajax 将 Knockout.js View 模型发布到 ASP.NET MVC Controller 操作会导致空值

javascript - 我是 Angularjs 新手,只是尝试填充多个 json 值,但它不起作用

json - Yii JSON 与关系

Javascript:不管我的表情是什么,RegExp 都不起作用

javascript - 为什么我不能在 Internet Explorer 中向 window.external 对象添加方法但在其他浏览器上工作

php - AJAX表单问题

jquery - 如何将 WordPress 的 Disqus 插件与 JQuery Ajaxed 内容集成?

json - RangeError(索引):无效值:不在0..7范围内,包括8

javascript - 关于从组件监听窗口事件的 React.js 最佳实践

javascript - TinyMCE 正在改变我的内联 CSS