получить ответ $ .ajax - PullRequest
1 голос
/ 17 июня 2009
function Profiles() { };

Profiles.prototype.test = function() {
    var opt = {
        url: __profileurl__+'getall/', type: 'get', dataType:'json',
        success:function(response){
          return response;
        }
    };      
    $.ajax(opt);
};

var profile = new Profiles(); 

var r = profile.test(); 

// возвращает неопределенное значение ... ожидаемый результат должен быть ответом на запрос.

Ответы [ 4 ]

3 голосов
/ 17 июня 2009

Вы можете сделать это с помощью асинхронного запроса, но обычно это Bad Thing

Что-то вроде следующего: нужно вернуть данные.

function Profiles() { };

Profiles.prototype.test = function() {
    var returnedResponse;
    var opt = {
        async: false,
        url: __profileurl__+'getall/', type: 'get', dataType:'json',
        success:function(response){
          returnedResponse = response;
        }
    };          
    $.ajax(opt);
    return returnedResponse;
};

НО

Если вам действительно не нужно иметь возможность сразу же использовать возвращаемое значение из теста, вам будет намного лучше, если вы передадите обратный вызов в тест. Что-то вроде

Profiles.prototype.test = function(callback) {
    var opt = {
        url: __profileurl__+'getall/', type: 'get', dataType:'json',
        success:function(response){
          callback(response);
        }
    };          
    $.ajax(opt);
};

var profile = new Profiles(); 
profile.test(function(data) {
    // do something with the data
});
0 голосов
/ 17 июня 2009

Вы не можете «вернуть» ответ как его асинхронный ответ. Я полагаю, что вы можете поместить цикл while вокруг вызова и ждать ответа, если не хотите, чтобы выполнение продолжалось без возврата ответа.

0 голосов
/ 17 июня 2009

попробуйте установить синхронный запрос AJAX.

url: profileurl + 'getall /', тип: 'get', dataType: 'json', async: false

0 голосов
/ 17 июня 2009

Поскольку ваша функция ничего не возвращает, «успех» является определением для функции обратного вызова, и вы не можете использовать ее для возврата значений из вашей основной функции. Более того, поскольку вызов ajax является асинхронным, функция обратного вызова будет вызываться после завершения основной функции.

Вы можете определить глобальную переменную, изначально созданную для null, и в случае успеха вы присвоите ее этой переменной, а затем сможете проверить, является ли она пустой или нет. Вы можете сделать это более изощренным, изменив дизайн своего объекта, чтобы иметь поле, которое будет отвечать за ответ, и метод, который вам его вернет. Но, тем не менее, у вас есть проблема, поскольку вызов асинхронный, а javascript не имеет никакой синхронизации, поэтому вам нужно будет найти обходной путь, используя функцию setTimeout.

PS. Гораздо лучше поместить нужную логику в эту функцию обратного вызова или, может быть, в эту функцию обратного вызова сделать еще один вызов, и вы обработаете ваши данные.

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