2009-11-10 2 views
1

В следующей функции jquery может кто-нибудь объяснить мне, почему «второй» выполняется до «первого»? Я предполагаю, что весь запрос $ .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"); 
} 

Это будет вызывать первое предупреждение, а затем второе.

ответ

4

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

+0

Любой способ, чтобы он подождал, пока он не будет завершен? Я возвращаюсь из функции до завершения $ .post. –

+0

Единственный способ, который я могу придумать, - включить остальную часть исполняемого скрипта в качестве обратного вызова POST. –

+0

См. Мое обновление. Лучшим способом было бы передать функцию функции для выполнения в качестве обратного вызова в сообщении. – tvanfosson

3

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

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