функция с JQuery AJAX в нем не возвращая значение - PullRequest
2 голосов
/ 19 октября 2010

Эта функция не возвращает никакого значения, даже если вызов ajax проходит правильно

Функция:

function queryData(request)
{
    var ret = null;
    $.ajax({
        url: 'ajax.php',
        data: 'requestdata='+request,
        dataType: 'json',
        type: 'post',
        success: function (j) {
            if(j.ok == true)
                return j.data;
            else
                return 'error';
        }
    });
    return 'error';
}

Ответы [ 4 ]

3 голосов
/ 19 октября 2010

Функция ajax работает асинхронно, что означает, что она выполнит функцию успеха, когда получит результат от сервера.

Функция queryData всегда будет возвращать «ошибку» из-за характера запросов AJAX (по крайней мере, выполняемых таким образом). Вы можете принудительно выполнять запросы ajax синхронно, но обычно это нежелательное поведение.

Вы должны добавить логику, которую вы хотите, в свою функцию успеха, а не пытаться вернуть ее обратно. Вы можете передать именованную функцию параметру success, если хотите. Смотрите документацию по jQuery для ajax здесь .

0 голосов
/ 19 октября 2010

Функция success будет вызываться асинхронно. Поэтому в первую очередь функция инициализирует запрос ajax и завершается последним оператором return 'error';. После этого после получения ответа от сервера будет вызываться функция success с jQuery. Возвращается обратно к jQuery, но не будет использоваться.

0 голосов
/ 19 октября 2010

Эта функция возвращает значение до фактического завершения вызова ajax. Вызов ajax является асинхронной операцией, поэтому, когда вы выполняете вызов $ .ajax (), он сразу же возвращается, ваша функция сталкивается с возвращаемой ошибкой в ​​строке 16 и возвращает ошибку.

Через несколько миллисекунд вызов ajax завершается, и ваша функция успеха выполняется, но ее возвращаемое значение никуда не денется.

0 голосов
/ 19 октября 2010

Вы не можете сделать это.

AJAX равен асинхронно , что означает, что ваша функция вернется до того, как сервер отправит ответ.
Вам необходимо передать значение, используяобратный вызов, способ $.ajax делает.

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