2010-11-25 10 views
0

Ich habe ein Skript erstellt, um JSON-Daten aus einer Datei auf unserem Server mit AJAX zu bekommen, aber ich habe Probleme, es in eine Funktion zu setzen.AJAX-Funktion, um JSON-Daten zu erhalten

Hier ist mein Code:

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

Die Funktion alles tut Ich will es, aber ich habe gesagt, um nie wieder in der AJAX-Request blockiert wegen falscher passieren. Bei dieser Funktion scheint etwas falsch zu sein, aber ich weiß nicht, wie ich es ändern soll. Soll ich es ändern? Wenn das so ist, wie?

+0

sind Sie sich bewusst, dass Sie, wenn Sie jQuery verwenden, das obige Skript mit 1 Zeile machen könnten? Nur ein Hinweis. – RPM1984

Antwort

6

Sie es nicht so zurückgeben kann, dann ist es ein asynchroner Vorgang, dh Ihre json = JSON.parse(request.responseText) geschieht später, wenn der Server mit Daten reagiert ... lange, nachdem Sie .. Stattdessen kehrte man in eine Funktion übergeben kann, die akzeptiert die Daten, wie folgt aus:

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

Dann rufen Sie es wie folgt aus:

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

auf diese Weise können die Daten verwenden, wenn es verfügbar ist, es auf die nächste Funktion übergeben ... das ist die Art asyn chronische Anrufe sollen sich verhalten.

+1

Nick, diese Information hat mir eine Menge Zeit gespart und dafür bin ich dankbar. Jemand gibt diesem Mann eine Gehaltserhöhung. –

Verwandte Themen