2014-02-13 38 views
0

跨瀏覽器支持的JSON有多好?我只是嘗試以下操作:JSON支持的方式

<?php 

    header('Content-type: application/json'); 
    $arr = array('name' => 'Lisa'); 
    echo json_encode($arr); 
?> 

和AJAX:

<script type="text/javascript"> 

    $.ajax({ 
     type: 'get', 
     url: 'php-url-here', 
     success: function(response){ 
      alert(response.name); 
     } 
    }); 
</script> 

這將返回從JSON對象,是麗莎正確的信息,所以真正的問題是,是JSON響應解析,因爲瀏覽器基於傳遞的內容類型支持它,還是因爲JQuery中的ajax函數支持它?什麼是這樣做的防彈方式,這將在所有新舊瀏覽器或大多數瀏覽器中得到支持。

+0

http://stackoverflow.com/questions/891299/browser-native-json-support-window-json – koningdavid

+0

JSON只不過是一串字符,瀏覽器只能接收一串字符'$ .ajax()'檢查字符串是否類似於JSON,如果是,那麼'$ .ajax()'將它轉換成可用的JS表示法,如數組或對象。 '.ajax()'調用原生JS函數,並且根據瀏覽器已經實現的JS版本,您可以或不能將字符串轉換爲JS對象或數組 – MonkeyZeus

+0

http://caniuse.com/ JSON – Blazemonger

回答

3

的響應進行解析,因爲jQuery的承認它是基於服務器報告的Content-Type JSON。目前,解析JSON的本地瀏覽器支持是普遍的,但jQuery 1.x確實包含了自己的實現作爲後備。

因此:

  1. 如果你編寫自己的AJAX庫,並希望有自動解析你將不得不自己編寫的觸發邏輯。除非你關心古代瀏覽器,否則解析是內置的(JSON.parse)。
  2. 如果您使用jQuery,只要服務器發送正確的Internet媒體類型,您就不必擔心任何事情。
  3. 即使服務器有問題,您也可以指示jQuery將響應解析爲JSON(dataType選項)。
0

默認情況下,瀏覽器不應該呈現或解析JSON。如果你打開一個JSON頁面,它將只顯示爲文本。

但是,如果您希望解析JSON字符串,請使用JSON.parse()。它是supported by all major browsers

jQuery在這裏做什麼是它認識到響應是JSON,並解析它。

0

JSON代表JavaScript對象表示法 - 這足以告訴您,運行JavaScript的所有東西都可以以某種方式支持它。

但是,有一個更有限的JSON解析器是很好的,因爲它更快更安全。例如,調用var data = eval(JSONCode);的作品,但它很容易受到代碼注入。具有特定於JSON的解析器的瀏覽器是IE8 +,FireFox 3.5+,Chrome 4+,Safari 4.0+,Opera 10.5+和大多數移動瀏覽器(source)。他們通過本地API window.JSON完成此操作。

如果這對於您的應用程序來說沒有足夠的兼容性,那麼這裏有很多好的JSON解析器,它們再次優於eval,因爲它們更快更安全。下面是一個填充本地API的例子:http:// bestiejs.github.io/json3/。另一個被包含在jQuery中。