【问题标题】:Do some ajax and return a promise using getJSON做一些 ajax 并使用 getJSON 返回一个承诺
【发布时间】:2013-11-15 23:23:45
【问题描述】:

我正在使用此代码从 facebook api 获取数据并使用 Durandal 显示,它工作正常。

   return $.ajax({
        url: 'http://graph.facebook.com/facebook?callback=?',
        dataType: 'json',
    }).promise();

我试图用 getJSON 做同样的事情

$.getJSON( "http://graph.facebook.com/facebook?callback=?");

我尝试了以下代码;没用。

 var jqxhr = $.getJSON("http://graph.facebook.com/facebook?callback=?");
 return jqxhr;

这让我从 facebook 获取数据。

但问题在于兑现承诺。由于我使用的是 durandal,因此返回一个保证模块工作的承诺很重要。

当我们使用getJSON时如何返回一个promise?

这是我的 durandal 模块

define(function (require) {
    return {
        getCustomers: function () {
            //do some ajax and return a promise
            var jqxhr = $.getJSON("http://graph.facebook.com/facebook?callback=?");
            return jqxhr;
        }
    };
});

这就是我所说的

define(function (require) {
    var backend = require('backend');
    var ko = require('knockout');

    return {
        customers: ko.observableArray([]),
        activate: function () {
            var that = this;
            return backend.getCustomers().then(function (result) {
                var arr = [];
                arr.push(result)
                that.customers(arr);
            });
        }
    };
});

【问题讨论】:

    标签: javascript jquery ajax getjson promise


    【解决方案1】:

    这已经成功了。谢谢各位

    return $.getJSON( "http://graph.facebook.com/facebook?callback=?").done();
    

    【讨论】:

      【解决方案2】:

      它已经有了 Promise 接口:“$.getJSON() 返回的这个 jQuery XHR 对象,或“jqXHR”实现了 Promise 接口”

      看这里的例子:

      var a=$.getJSON( "http://graph.facebook.com/facebook?callback=?");
      
      a.done(function (){...}).fail(function (){...}).always(function (){...});;
      

      ps

      “这让我从 facebook 获取数据。”

      没有。这将返回 jqXHR 对象。

      【讨论】:

        【解决方案3】:

        这应该可以工作

        $.getJSON( "http://graph.facebook.com/facebook?callback=?").promise();
        

        【讨论】:

        • 已经有了 Promise 接口:"$.getJSON() 返回的这个 jQuery XHR 对象,或者说“jqXHR”,实现了 Promise 接口”
        • @RoyiNamir 那么如何实现这个'return a promise'的东西呢?
        • 是的。所有功能都已经存在于原始jqXHR 上。调用 .promise() 只获得了 Promise 接口函数,而留下了其他 jqXHR 的东西。
        • @PaulDraper:是的,我只想返回承诺部分
        • 我想如果你使用一大堆这些,会有一些(次要的)内存优势。
        猜你喜欢
        • 2015-11-27
        • 2015-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-28
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        相关资源
        最近更新 更多