Почему я не могу вернуть объект Json? - PullRequest
0 голосов
/ 17 февраля 2011

Я получаю неопределенное значение, когда пытаюсь вернуть объект из функции. И я почти уверен, что объект не пустой, иначе alert(response.html); не должен работать.

var Core = {
    "Ajax" : function(url, data){
        $.ajax({
            type: "POST",
            url: host + url,
            data: data,
            success: function(json){
                var response = $.parseJSON(json);
                if(response.status == "200"){
                    alert(response.html);
                    return response;
                }
                else{
                    alert(response.html);
                    return false;
                }
            },
            error:function (xhr, ajaxOptions, thrownError){
                alert(xhr.status);
            }
        });
    }
};

Ответы [ 3 ]

6 голосов
/ 17 февраля 2011

Возможно, вы неправильно понимаете концепцию Ajax, которая является асинхронной.

После успешного запроса браузер вызовет успешный обратный вызов.Все, что вы вернете в обратном вызове успеха, просто исчезнет.

Невозможно вернуть что-то в строку кода, которая инициирует запрос - когда срабатывает обратный вызов успехауже прошел эту черту.

2 голосов
/ 17 февраля 2011

Вы не можете вернуть вещи из асинхронных функций. Функция, которая вызывает $.ajax(), возвращается сразу после вызова - (почти) всегда до того, как ответ будет получен. Делайте все, что вам нужно, с ответом в обратном вызове success.

PS: Добавьте dataType: 'json' к вашим аргументам ajax и используйте json.status - нет необходимости выполнять анализ самостоятельно.

Кроме того, используйте консоль Firebug, чтобы проверить, что вы на самом деле получаете от сервера (alert() это , а не отладчик)

0 голосов
/ 17 февраля 2011

Вы не можете ничего вернуть из вызова $.ajax, это асинхронно. Вам нужно, чтобы он вызывал другую функцию обратного вызова и передавал ее response.

Кроме того, вам не нужно $.parseJSON(json). Просто установите dataType: 'json' и jQuery проанализирует JSON для вас.

...