У меня есть объект с функцией обув, содержащих AJAX вызов, JQueryждать АЯКС закончить в функции
foo: function() {
...
jQuery.ajax({
contentType : "application/json",
type: "POST",
async: true,
...,
success: function(data) {
globalVariable = 1;
},
error: function(error) {
}
});
}
Мой тестовый код:
var pass = true;
myObj.foo();
if (globalVariable !== 1) {
pass = false;
}
Я хочу заявление myObj.foo()
закончить с АЯКС отделкой тоже. Если ajax не заканчивается, globalVariable
не равен 1.
Я не могу установить async
в false
в ajax, потому что это производственный код.
GlobalVariable должен быть установлен в '1' с этим функции, вам просто нужно подождать, пока ca завершено. Возможно, посмотрите на передачу функций обратного вызова на 'foo()', которые уведомили бы вас, когда был вызван 'success' /' error'. В качестве альтернативы вы можете посмотреть в jQuery обещания: https://api.jquery.com/promise/ – haxxxton
Не делайте этого синхронно, @Vu Le Anh. Думаю, теперь рекомендуется использовать функцию 'foo' promisable. Затем вы можете выполнить проверку 'globalVariable' на' done' callback функции prom, в которой эта переменная будет передана как параметр в обратном вызове. –
То, что вы просите, невозможно, если вы не можете установить 'async' в false. Javascript является однопоточным. Таким образом, код ajax добавляется в очередь выполнения после foo и запускается только после того, как функция foo завершает свою очередь. Если вы помещаете что-либо в функцию foo, чтобы ждать завершения вызова ajax, то он будет работать вечно, когда никогда не запускается вызов ajax. –