Как вернуть объект json в функцию javascript? - PullRequest
4 голосов
/ 12 января 2012

У меня есть эта функция

function getTags(level){
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) {
        return json;
    });
}

Я вызываю эту функцию как

$(function(){
    var tags = getTags('0');  
});

Проблема в том, что в функции getTags() возврат json похож на

{"tags":["Mathematics","Science","Arts","Engineering","Law","Design"]}

но при var tags = getTags('0'), перехватывая возвращаемое значение, он получает значение undefined.

Способ, которым я возвращаю значение, неверный

Ответы [ 5 ]

5 голосов
/ 12 января 2012

Как и многие другие, уже правильно описанные, запрос ajax по умолчанию выполняется асинхронно. Так что вам нужно правильно с этим справиться. Что вы можете сделать, это вернуть объект jXHR, который также составлен с помощью генератора обещаний jQuery. Это может выглядеть как

function getTags(level){
    return $.getJSON("php/get-tags.php", { "parent": level });
}

, а затем разобраться с этим, как

$(function(){
    getTags('0').done(function(json) {
        // do something with json
    });
});
2 голосов
/ 12 января 2012

Вы пытаетесь вызвать асинхронную функцию синхронно.

Когда вы вызываете getTags, он запускает вызов вашей PHP-страницы, если javascript блокировал, то ваша страница зависала до тех пор, пока ваш сервер не ответил JSON. Вам нужно переосмыслить свою логику и вызвать обратный вызов.

function getTags(level){
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) {
        //do something with the JSON here.
    });
}
1 голос
/ 12 января 2012

Если вам нужно, чтобы она работала подобным образом, ваша функция getTags должна возвращать значение. Это не в данный момент. Вы можете достичь этого, используя $.ajax и установив async в false.

1 голос
/ 12 января 2012

getJSON является асинхронным, вызвавшая его функция завершится к тому времени, когда ответ HTTP вернется и вызовет обратный вызов.

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

1 голос
/ 12 января 2012

Вы не можете вернуться с AJAX-звонка.Это асинхронно.Вы должны иметь всю логику, связанную с возвращенными данными в обратном вызове.

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