функция не видит JSON-объект (java-скрипт, jQuery) - PullRequest
1 голос
/ 20 августа 2010
function json (url){
       $.getJSON(url, function(data) {
           return data;
       })
   }

эта функция не видит "данные"

function MakeAlert(){
       data = json('action.php');
       window.alert(data.name);
}

эта работа:

  function json (url){
           $.getJSON(url, function(data) {
               window.alert(data.name);
           })
  }

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

Это потому, что $.getJSON является асинхронным. Отправляет запрос и сразу возвращается. Когда сервер отвечает (что может быть через несколько секунд), он вызывает обратный вызов success, и поэтому data доступен только внутри этого обратного вызова.

Если вы хотите заблокировать вызывающего абонента, вы можете отправить синхронный запрос (обратите внимание, что это может привести к зависанию интерфейса во время выполнения запроса, что противоречит цели AJAX):

function json(url) {
    var result = null;
    $.ajax({
        url: url,
        async: false,
        dataType: 'json',
        success: function(data) {
            result = data;
        }
    });
    return result;
}
1 голос
/ 20 августа 2010
function json (url){
   $.getJSON(url, function(data) {
       return data;
   })
}

Вы не можете использовать return здесь.Вы бы вернули data к анонимной функции закрытия.

Лучше всего использовать callback function, который следует применять при выполнении обработчика успеха getJSON.

function json (url, cb){
   $.getJSON(url, function(data) {
       cb.apply(null, [data]);
   })
}

использование

json('action.php', function(data){
    alert(data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...