Попытка получить результат json из метода в другом пространстве имен, возникли проблемы - PullRequest
1 голос
/ 11 мая 2010

У меня есть отдельный файл .js и пространство имен для запросов json. У меня есть другой файл .js и пространство имен для реальной логики.

Кажется, я не могу получить результат обратно в свой логический слой.

var jsonResult = Blah.Data.LoadAggregates();

alert(jsonResult);
alert(jsonResult.d.length);
alert(jsonResult.length);

все вышеперечисленные вызовы возвращаются неопределенными.

Blah.RegisterNamespace("Blah.Data");

(function(Data) {


    Data.LoadAggregates = function() {

        $.ajax({
            type: "POST",
            url: "asdf.asmx/GetAggregates",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                ???????

            },
            error: function(msg) {
                alert("error" + msg);
            }
        });

    };

})(Blah.Data);  

1 Ответ

1 голос
/ 11 мая 2010

AJAX-вызовы являются асинхронными, что означает, что $.ajax вызов не будет ожидать ответа сервера.

Следовательно, ваша LoadAggregates функция завершает выполнение до того, как ответит сервер.

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

Например:

Data.LoadAggregates = function(callback) {

    $.ajax({
        type: "POST",
        url: "asdf.asmx/GetAggregates",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data) {
            //Do something to the data if you want to

            callback(data);        //You can pass any parameters you want
        },
        error: function(msg) {
            alert("error" + msg);
        }
    });

};

Тогда вы бы назвали это так:

Blah.Data.LoadAggregates(function(jsonResult) {
    alert(jsonResult.length);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...