2009-04-03 9 views
0

私は関数からオブジェクトを渡そうとしています。ここに私のコードは次のとおりです。私は何をしたいかJSON objを解析関数から渡しますか? | noob javascriptの質問

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

は私がloadJSON()は私がオブジェクトで物事を行うことができます呼び出した後ようにオブジェクトを渡したい代わりにparseJSON関数内オブジェクトoを使用するのです。私は、それが "きちんとしていない" innerHTMLの呼び出しを解析関数内に持っていることがわかります。

スクリプトの開始時に "var jsonOutput"と宣言してから "jsonOutput = o"を作成するなど、多くの繰り返しを試しましたが、jsonOutputは未定義のままです。私がjsonOutputを返そうとすると、どこに返されているのか分からず、とにかく使用できません。

グローバル変数を作成する必要はありますか?私は単純な "global jsonOutput"宣言を試みましたが、関数内で変更されていないようです。

頑張ってください。

答えて

0

あなたのシナリオを完全に理解しているかどうかは分かりませんが、ブール値またはjsonを返すのではなく、オブジェクト全体を返そうとしましたか?

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

うーん、parseJSONがコールバックなので、それはJSONコードは「O」オブジェクトとしてオフサイトから受け取った、それは私が関数の外で公開するデータです。私は "var jsonOutput = {};" (関数内外で)、 "jsonOutput = o; return jsonOutput"を設定しますが、そうではないようです。 –

1

また、あなたが<script>タグを使用してJSONデータをロードしようとしているようです。

またXMLHttpRequest経由でJSONデータをロードし、その後経てオブジェクトにそれを回すことができます:

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

そして、あなたはデータがどのように安全な確認できない場合は、次のように表示(official JSON JavaScript parserを使用することができます詳細についてはhereを参照してください)。

スティーブ

+0

XMLHttpRequestをネットワークトランザクションで重く集めるので、XMLHttpRequestの使用を避けようとしていましたか?しかし、アドバイスをいただきありがとうございます。私はソースについて確信していますので、今回はjson2.jsを使用していません。 –

+0

XMLHttpRequestがHTMLページに直接ファイルをロードするよりも重たくなる理由がわかりません... JavaScriptでXML/JSONデータをロードする必要があるときはいつでも、XMLHttpRequestを使用するのが一般的な方法です。 –

関連する問題