我在应用程序中使用Backbone.js和jQuery 1.7,在构建集合时遇到一些问题。在集合中,我有方法,该方法应该返回一些对象。我在$ .ajax(...)success()函数中“返回”。

在这种情况下,我收到“未定义”而不是预期的对象。我了解,问题出在“返回”中-它使success()函数返回一些值。但是我需要getDomainZones()方法返回。我该怎么做?

window.DmnList = Backbone.Collection.extend({
        model: DmnItem,
        localStorage: new Store("hosting.WhoIs"),
        destroyAll: function (options) {
            while (this.models.length > 0) {
                this.models[0].destroy(options);
            }
        },
        getDomainZones: function(){
            $.ajax({
                url: 'http://hosting/rest/getDomains',
                type: 'GET',
                dataType: 'json',
                cache: 'false',
                timeout: 5000,
                success: function(data) {
                    console.log(data);
                    return data;//problem here
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    console.log("Error[getDomainZones]: " + textStatus);
                    console.log(jqXHR);
                },
            });
        }
});

最佳答案

“我应该在哪里放置退货单”


无处。您无法返回异步AJAX请求的结果。

任何依赖data的代码都必须在success回调内部调用。



一种可能是让您的getDomainZones方法接收一个函数,该函数将在收到响应时被调用。

getDomainZones: function( callback ){
    $.ajax({
        url: 'http://hosting/rest/getDomains',
        type: 'GET',
        dataType: 'json',
        cache: 'false',
        timeout: 5000,

   //   success: callback,  // alternative if there's no other work to do.
        success: function(data) {
            console.log(data);

            callback( data ); // invoke the function received
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log("Error[getDomainZones]: " + textStatus);
            console.log(jqXHR);
        },
    });
}


因此,然后您将一个函数传递给getDomainZones,并且在收到响应时,getDomainZones将调用您传递的函数,并将其传递给data

getDomainZones( function( d ) {
    // do something with the data
    console.log( d );
});

10-06 14:17