2010-02-14 75 views
1

我正在迴應JSON數據作爲我寫作的Web服務中的響應。在JavaScript函數中使用JSON數據

我想知道什麼是最好的方式來使用數據,返回到一個Javascript函數(作爲參數傳遞)。

待辦事項我:

  1. 使用eval()
  2. 使用道格·克勞福德JSON解析器將JSON數據解析成一個JavaScript對象
  3. 簡單地使用返回的數據爲對象字面

順便說一句,我還在學習Javascript,(剛剛開始閱讀權威指南2天前),所以如果我的問題似乎有點天真或asinine - 承擔我。

回答

2

我建議幾件事,第一,在網絡服務端:

  1. 如果callback=functionName參數在查詢字符串中傳遞,然後返回正確的序列化JSON作爲該唯一的參數回調函數(在這種情況下functionName
  2. 如果不請求回調,然後簡單地返回正確的序列化JSON字符串(這是有幫助的,當其他語言消耗JSON。PHP和Ruby例如)

然後,就使用它而言,如果您與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函數。

+2

所有主流瀏覽器的最新版本都支持原生JSON,所以腳本應該在加載json2.js之前檢查它。 –

0

假設您的webservice使用ScriptService屬性進行修飾: 我建議使用json2.js來處理json客戶端。當它們可用時,它遵循本地實現。 (1)

0

(1)。使用eval()

只有當您確定數據是乾淨的。我永遠不會相信任何來自外部的信息。 (2)

(2)。使用Doug Crawfords jSon解析器將JSON數據解析爲Javascript對象

總體上最好的想法。即使jQuery使用普通的舊eval()來解析JSON。

(3)。只需使用返回的數據作爲對象文字

返回時,它只是一個字符串,不是對象,除非通過上述兩個函數之一傳遞,或者包裝在函數ala JSONP中。

+0

@bdl「即使jQuery使用普通的舊eval()來解析JSON」是不正確的,因爲jQuery 1.4 –

+0

@Doug>感謝您的澄清。編輯:顯然他們沒有改變API文檔,因爲它仍然聲稱使用eval()。 – bdl

相關問題