JQuery 1.11.1 Deferred Then - 带参数的多个

时间:2015-07-17 20:40:58

标签: javascript jquery

我已经在我的javascript函数中发布了一系列延迟的'然后在我的javascript函数中。

在JQuery 1.7.2中,我能够创建类似于以下示例的内容,从每个示例中传递参数以确定是否继续。

myAjaxFunction(myParametersObject)
.done(function (noErrors) {
    if (anyErrors == true) {
        // call ajax routine

        return true; 
    } else {
        //stop code execution
        return false;
    }
})
.then(function (noErrors) {
    if (anyErrors == true) {
        // call ajax routine

        return true; 
    } else {
        //stop code execution
        return false;
    }
})
.then(function (noErrors) {
    if (anyErrors == true) {
        // call ajax routine

        return true; 
    } else {
        //stop code execution
        return false;
    }
})
.then(function (noErrors) {
    if (anyErrors == true) {
        // final code here

    }
});

它在JQuery 1.7.2上运行得很好,但我正在开发一个需要JQuery 1.11.1的项目,这不再适用。

如何将参数传递给即将到来的'然后'在JQuery 1.11.1中?

2 个答案:

答案 0 :(得分:1)

返回来自myAjaxFunction的jQuery promise值似乎在noErrors处理程序参数参数

中定义为done
.done(function (noErrors) {
<{1>在.done处理程序中为anyErrors

if (anyErrors == true) {

同样

.then(function (noErrors) {
    if (anyErrors == true) {
        // call ajax routine

尝试设置与参数相同的参数并在处理程序中设置.e.g。 anyErrors

var dfd = $.Deferred().resolve(true);
dfd.done(function (anyErrors) {
    if (anyErrors == true) {
        // call ajax routine

        return true; 
    } else {
        //stop code execution
        return false;
    }
})
.then(function (anyErrors) {
    if (anyErrors == true) {
        // call ajax routine

        return true; 
    } else {
        //stop code execution
        return false;
    }
})
.then(function (anyErrors) {
    if (anyErrors == true) {
        // call ajax routine

        return true; 
    } else {
        //stop code execution
        return false;
    }
})
.then(function (anyErrors) {
    if (anyErrors == true) {
        // final code here
       document.body.textContent = anyErrors;
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

jsfiddle http://jsfiddle.net/zr5rzb7v/1/

答案 1 :(得分:0)

如果您先使用然后再使用,则可以使用它:

var request = $.ajax( url, { dataType: "json" } ),
  chained = request.then(function( data ) {
    return $.ajax( url2, { data: { user: data.userId } } );
  });

chained.done(function( data ) {
  // data retrieved from url2 as provided by the first request
});

请参阅官方jquery api文档:http://api.jquery.com/deferred.then/#deferred-then-doneFilter-failFilter-progressFilter