Вы пытаетесь сделать вызов ajax синхронно, но вы делаете асинхронный вызов.
Важно понимать, что, как вы его написали, код не ожидает завершения вызова AJAX, прежде чем перейти к следующей строке. Поэтому он всегда возвращает начальное значение ret
.
Сделайте несколько вещей, чтобы исправить это:
- Используйте jQuery (если вы еще этого не сделали)
- Используйте функцию jQuery ajax () и установите для
async
значение false.
Должно выглядеть примерно так:
function foo()
var ret = $.ajax({ url: "blah",
async: false
}).responseText;
// do your stuff here
return ret;
}
РЕДАКТИРОВАТЬ: Это можно сделать с помощью асинхронного вызова, но вы должны настроить способ, которым вы думаете о проблеме. Вместо того, чтобы думать о возвращаемых значениях, вы должны думать о функциях обратного вызова.
Для примера, скажем, я пытаюсь получить имя пользователя и разместить его на странице. Мой код будет выглядеть примерно так:
function GetUsername() {
$.ajax( { url: "blah",
success: PopulateUsername // Specify a callback
});
// I don't do anything else. Execution will continue when the
// callback gets called from the AJAX call.
}
function PopulateUsername(data) {
alert(data);
// Anything else I want to do, I do here, because it is only
// here that I have access to the result.
}
GetUsername(); // I call GetUsername() here, and that's it. Any
// further actions that need to happen are going to
// occur in the callback function