Функция AJAX для получения данных JSON - PullRequest
0 голосов
/ 25 ноября 2010

Я создал скрипт для получения данных JSON из файла на нашем сервере, используя AJAX, но у меня возникли проблемы с его введением в функцию.

Вот мой код:

function getJSON (file)
    {
      var request = AjaxRequest();
      var json = "";
      request.onreadystatechange = function ()
      {
         if(request.readyState==4 && request.status==200)
            {
              json = JSON.parse(request.responseText);
            }
      }
      request.open("GET", file, false);
      request.send();
      return json;
     }

Функция делает все, что я хочу, но мне НИКОГДА не сообщалось передавать false в запрос AJAX из-за блокировки. Что-то просто не так с этой функцией, но я не знаю, как ее изменить. Должен ли я изменить это? Если да, то как?

1 Ответ

6 голосов
/ 25 ноября 2010

Вы не можете вернуть это так, это асинхронная операция, означающая, что ваша json = JSON.parse(request.responseText) происходит позже , когда сервер отвечает данными ... спустя много времени после вашего возвращения. Вместо этого вы можете передатьв функции, которая принимает данные, например:

function getJSON (file, callback)
{
  var request = AjaxRequest();
  request.onreadystatechange = function ()
  {
     if(request.readyState==4 && request.status==200)
     {
       callback(JSON.parse(request.responseText));
     }
  }
  request.open("GET", file, false);
  request.send();
}

Затем вы называете это так:

getJSON("something.json", function(data) { 
  //use data, your json object/data
});

Таким образом, вы используете данные, когда они доступны, передавая ихна следующую функцию ... именно так должны вести себя асинхронные вызовы.

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