2010-11-25 2 views
0

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

Вот мой код:

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; 
    } 

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

+0

Вы знаете, что если вы использовали jquery, вы могли бы выполнить описанный выше сценарий с помощью 1 строки? просто подсказка. – RPM1984 2010-11-25 03:32:22

ответ

6

Вы не можете вернуть его, как это, это асинхронная операция, то есть ваш 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 
}); 

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

+1

Ник, эта информация спасла меня от времени и за это я благодарен. Кто-то дает этому человеку рейз. – 2012-01-02 02:05:54

Смежные вопросы