我正在迴應JSON數據作爲我寫作的Web服務中的響應。在JavaScript函數中使用JSON數據
我想知道什麼是最好的方式來使用數據,返回到一個Javascript函數(作爲參數傳遞)。
待辦事項我:
- 使用eval()
- 使用道格·克勞福德JSON解析器將JSON數據解析成一個JavaScript對象
- 簡單地使用返回的數據爲對象字面
順便說一句,我還在學習Javascript,(剛剛開始閱讀權威指南2天前),所以如果我的問題似乎有點天真或asinine - 承擔我。
我正在迴應JSON數據作爲我寫作的Web服務中的響應。在JavaScript函數中使用JSON數據
我想知道什麼是最好的方式來使用數據,返回到一個Javascript函數(作爲參數傳遞)。
待辦事項我:
順便說一句,我還在學習Javascript,(剛剛開始閱讀權威指南2天前),所以如果我的問題似乎有點天真或asinine - 承擔我。
如果您使用的是jQuery,您可以將其設置爲它作爲JSON對象返回。 http://api.jquery.com/jQuery.getJSON/
我建議幾件事,第一,在網絡服務端:
callback=functionName
參數在查詢字符串中傳遞,然後返回正確的序列化JSON作爲該唯一的參數回調函數(在這種情況下functionName
然後,就使用它而言,如果您與Web服務位於同一個域中,則可以檢索代碼並使用json2.js
parser來解析它。如果您位於單獨的域中,請求數據時請使用callback
參數,並確保設置了處理回調的函數。
簡單的例子(使用PHP):
<?php
$callback = null;
if(isset($_REQUEST['callback'])){
$callback = $_REQUEST['callback'];
}
$fakeData = array('key' => 'value');
$json = json_encode($fakeData);
echo $callback ? "$callback($json)" : $json;
?>
JS(在不同的領域不是Web服務):
function handleCallback(data){
alert(data.key);
}
function get_json(){
// Dynamically create the script element
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "http://yourwebservice.com/service/?callback=handleCallback";
document.getElementsByTagName('head')[0].appendChild(script);
}
調用get_json
將動態創建的請求(爲腳本元素由於跨域限制,你不能在大多數瀏覽器中使用XMLHttpRequest進行跨域請求),並且PHP返回的腳本會糾正當腳本返回時,您可以調用handleCallback
函數。
假設您的webservice使用ScriptService屬性進行修飾: 我建議使用json2.js來處理json客戶端。當它們可用時,它遵循本地實現。 (1)
(1)。使用eval()
只有當您確定數據是乾淨的。我永遠不會相信任何來自外部的信息。 (2)
(2)。使用Doug Crawfords jSon解析器將JSON數據解析爲Javascript對象
總體上最好的想法。即使jQuery使用普通的舊eval()來解析JSON。
(3)。只需使用返回的數據作爲對象文字
返回時,它只是一個字符串,不是對象,除非通過上述兩個函數之一傳遞,或者包裝在函數ala JSONP中。
@bdl「即使jQuery使用普通的舊eval()來解析JSON」是不正確的,因爲jQuery 1.4 –
@Doug>感謝您的澄清。編輯:顯然他們沒有改變API文檔,因爲它仍然聲稱使用eval()。 – bdl
所有主流瀏覽器的最新版本都支持原生JSON,所以腳本應該在加載json2.js之前檢查它。 –