2015-07-17 2 views
0

Я выдал цепочку связки отложенных «тогда в моей функции javascript.JQuery 1.11.1 Отложенное потом - многократное с параметрами

В 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?

+0

'затем' не существует для JQuery 1.11.1. Возможно, вы сможете использовать https://github.com/kriskowal/q и обещать функцию, которая позволит вам использовать '.then' – jmunsch

ответ

1

Вернуться Jquery значение обещание myAjaxFunction по всей видимости, определяется как noErrors в done обработчиком параметр аргумента

.done(function (noErrors) { 

в пределах .done обработчик как anyErrors?

if (anyErrors == true) { 

аналогично в

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

?

Попробуйте установить тот же параметр, что и параметр аргумента, и внутри обработчика, например. 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/

+0

В моем реальном коде я передавал объект json, который иногда изменяется в заданном« затем ', и в этом была проблема. теперь, если я передаю согласованный объект, он работает. благодаря – fictus

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 апи документации: http://api.jquery.com/deferred.then/#deferred-then-doneFilter-failFilter-progressFilter

Смежные вопросы