Порядок вызова функции jquery $ .post - PullRequest
1 голос
/ 10 ноября 2009

Может ли кто-нибудь объяснить мне в следующей функции jquery, почему «second» выполняется перед «first»? Я предполагаю, что весь запрос $ .post должен быть выполнен до того, как браузер перейдет к следующей строке кода, но этого не происходит.

function getGUID () {
$.post(getGUIDScript, function(data, textStatus) { 
    alert("first");
    GUID = data;
    }, 
    'text');

    alert("second");        
}

Спасибо за ответы ниже, ребята. Ради потомков можно написать код выше, как показано ниже, чтобы дождаться завершения сообщения, прежде чем двигаться дальше.

function getGUID () {
$.ajax({
type:   "POST",
url:    getGUIDScript,
async:  false,
success:    function(data) {
    alert("first");
    GUID = data;
}
});
    alert("second");
}

Это отключит первое оповещение, а затем второе.

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

Пост выполняется асинхронно, поэтому следующий оператор выполняется до завершения первого. Если вы хотите, чтобы они были синхронными, вам нужно использовать $ .ajax и установить для параметра async значение false. А еще лучше: используйте механизм обратного вызова, чтобы публикация ожидала и выполняла последующие действия после завершения вызова ajax, выполняемого этой публикацией.

3 голосов
/ 10 ноября 2009

$.post() инициализирует асинхронный запрос POST, который принимает обратный вызов в качестве аргумента. Обратный вызов выполняется, когда сервер возвращает ответ на запрос POST.

2 голосов
/ 10 ноября 2009

Если вы хотите сделать синхронный вызов ajax, вы можете установить для asyc значение false. Смотри http://docs.jquery.com/Ajax/jQuery.ajax#options

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...