2012-10-11 24 views
0

我遇到了Jquery延迟对象的问题。我在一个函数内部创建了一个promise,它将执行ajax调用并将数据保存到服务器。 我知道jQuery ajax具有预定义的延期对象。jQuery当函数不评估延迟对象

var AddCodes = function(XML){ 
    var def = $.Deferred(); 

    $.ajax({ 
     type: "POST", 
     url: "webservicename.asmx/SaveCode", 
     data: "{" + XML + "}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function() { 
      def.resolve(); 
     }, 
     error: function (jqXHR, status, error) { 
      def.reject(); 
     } 
    }); 

    return def.promise(); 
} 

然后我正在评估这样的功能。

$.when(AddCodes(XML)).then(function(){ 
    processData(); 
} 

如果AddCodes()函数成功执行,我只能调用另一个函数来将一些数据插入到数据库中。因为两者都是依赖函数。

问题是,当功能不评估延期object. processData()从未工作。我使用延迟的第一次到我的项目。请帮我解决这个问题。

回答

1

documentation$.when()同时接受延期对象(与$.Deferred()普通对象,被视为已经履行承诺创建。

如果一个参数传递给jQuery.when,它是不递延,它会被当作一个解决延迟和连接任何doneCallbacks将立即执行。

AddCodes()不返回任何东西。如果你回到你延迟对象(def)这应该起作用。

所以,如果你改变你的代码

var AddCodes = function(XML){ 
    var def = $.Deferred(); 

    $.ajax({ 
     .... 
    }); 

    return def.promise(); 
} 

你应该确定。请注意,这就像the first example here

+0

我没有复制正确的代码。现在我编辑了代码。我已经使用了回报。但不工作。 – Aroor