2009-04-03 6 views
0

Ich versuche, ein Objekt aus einer Funktion übergeben. Hier ist mein Code:JSON obj aus der Parse-Funktion übergeben? | noob Javascript Frage

<script type="text/javascript"> 

// finds the head element; creates a script with passed url; appends it to the head 
function loadJSON(url) { 
    var headID = document.getElementsByTagName("head")[0];   
    var newScript = document.createElement('script'); 
     newScript.type = 'text/javascript'; // isn't this 'application/json' really? 
     newScript.src = url; 
    headID.appendChild(newScript); 
} 

function parseJSON(o) { 
    if (content == null) { 
    document.write("<p>parseJSON(): JSON failed.</p>"); 
    return false; 
    } 

    isDST = "<strong>not</strong> "; 
    if (o.rawOffset == o.dstOffset) { 
    isDST = ""; 
    } 
    document.getElementById("geonames").innerHTML = "<p>The time now is " + o.time + " in " + o.countryName +".</p>"; 
} 

var lat = "47.01"; var long = "10.2"; // test data for austria 
var jsonUrl = " {{URL}} "; 
loadJSON(jsonUrl); 
</script> 

Was ich tun möchte, ist, anstatt das Objekt o in der parseJSON Funktion möchte ich das Objekt zu übergeben, so dass nach dem loadJson() nenne ich die Dinge mit dem Objekt tun kann. Ich finde es nicht "ordentlich", dass die innerHTML-Aufrufe innerhalb der Parse-Funktion sind.

Ich habe viele Wiederholungen von versucht, zB "var jsonOutput" am Anfang des Skripts zu deklarieren und dann "jsonOutput = o" zu machen, aber das lässt jsonOutput undefined. Wenn ich versuche, jsonOutput zurückzugeben, weiß ich nicht, wo es zurückgegeben wird, ich kann es sowieso nicht verwenden.

Muss ich eine globale Variable erstellen? Ich habe versucht, eine einfache "globale jsonOutput" -Deklaration, aber es scheint nicht in der Funktion geändert werden.

Am stecken, bitte helfen.

Antwort

0

Ich bin mir nicht ganz sicher, ob ich Ihr Szenario vollständig verstehe, aber haben Sie versucht, ein ganzes Objekt zurückzugeben, anstatt nur einen booleschen oder json zurückzugeben?

function parseJSON(o) 
{ 
    // Your code here 
    var result = new Object(); 
    result.IsSuccess = true; // or false 
    result.JSON = someData; // your json output 
    return result; 
} 

function loadJSON() 
{ 
    // Your code here 
    var jsonParseResult = ParseJSON(o); 
    if (jsonParseResult.IsSuccess) 
    { 
     // More code here involving jsonParseResult.JSON 
    } 
} 
+0

Hmm, das parseJSON der Rückruf ist, so hat es die JSON-Code empfangen von Offsite als Objekt „o“, das ist die Daten, die ich außerhalb der Funktion verfügbar machen möchten. Ich habe versucht "var jsonOutput = {};" (in und aus der Funktion) und dann setzen "jsonOutput = o; jsonOutput zurückgeben", aber das scheint es nicht zu tun. –

1

Auch scheint es, dass Sie versuchen, die JSON-Daten unter Verwendung des <script> Tag zu laden.

Sie könnten auch die JSON-Daten über eine XMLHttpRequest laden und dann biegen Sie in ein Objekt über:

var dataObject = eval('(' + myJSONData + ')'); 

Und wenn Sie nicht überprüfen können, wie sicher die Daten vorhanden sind, können Sie die official JSON JavaScript parser (siehe here für weitere Informationen), um die Daten vor der Ausführung zu validieren.

Steve

+0

Ich habe versucht, XMLHttpRequest zu vermeiden, da ich feststelle, dass es bei Netzwerktransaktionen schwerer ist? Danke für den Rat, aber ich bin zuversichtlich über die Quelle, also benutze diesmal json2.js nicht. –

+0

Ich bin mir nicht sicher, warum eine XMLHttpRequest schwerer wäre als das direkte Laden der Datei in die HTML-Seite ... Ich denke, es ist eine ziemlich übliche Praxis, eine XMLHttpRequest immer zu verwenden, wenn XML/JSON-Daten in JavaScript geladen werden müssen. –