JSON基本概念
JSON: javascript對象表示法(javascriptObject Notation)
JSON是存儲和交換文本信息的語法,類似XML。它採用鍵值對的方式來組織,易於閱讀和編寫,同時也易於機器解析和生成。
JSON是獨立於語言的,也就是說不管什麼語言,都可以解析json,只需要按照json的規則來就行
JSON與XML比較
Json的長度和xml格式比起來很短小
Json讀寫的速度更快
Json可以使用javascript內建的方法直接進行解析,轉換成javascript對象,非常方便
JSON語法規則
Json數據的書寫格式是:名稱/值對
名稱/值對組合中的名稱寫在前面(在雙引號中),值對寫在後面(同樣在雙引號中),中間用冒號隔開,比如“name”:“郭靖”
Json的值可以是下面這些類型:
數字(整數或浮點數),比如123,1.23
字符串(在雙引號中)
邏輯值(true或false)
數組(在方括號中)
對象(在花括號中)
Null
例子:
{
“staff“:[
{“name”: “洪七”, “age”: 70},
{“name”: “郭靖”, ”age”:35}
{“name”: “黃蓉”, ”age“:30}
]
}
JSON解析
eval和JSON.parse
在代碼中使用eval是很危險的!特別是用它執行第三方的json數據(其中可能包含惡意代碼)時,儘可能使用JSON.parse()方法解析字符串本身,該方法還可以捕捉JSON中的語法錯誤。
Json校驗工具:JSONLint.com----在線進行代碼校驗是否有錯
用jQuery實現Ajax
jQuery.ajax([settings])
type: 類型,“POST”或”GET“,默認爲”GET”
url: 發送請求的地址
data:是一個對象,連同請求發送到服務器的數據
datatype:預期服務器返回的數據類型。如果不指定,jquery將自動根據HTTP包MIME信息來智能判斷,一般採用json格式,可以設置爲”json”
success: 是一個方法,請求成功後的回調函數。傳入返回後的數據,以及包含成功代碼的字符串
error:是一個方法,請求失敗時調用此函數。傳入XMLHttpRequest對象
跨域
一個域名地址的組成:
http://(協議)+ www. (子域名) + abc.com:(主域名) + 8080/(端口號) + scripts/jquery.js(請求資源地址)
當協議,子域名,主域名,端口號中任意一個不相同時,都算作不同域名
不同域之間相互請求資源,就算作“跨域”
比如:
http://www。Abc.com/index.html請求http://www.efg.com/service.php
javascript出於安全方面的考慮,不允許跨域調用其它頁面的對象。
www.abc.com/index.html調用www.abc.com/service.php(非跨域)
www.abc.com/index.html調用www.efg.com/service.php(跨域)
www.abc.com/index.html調用bbs.abc.com/service.php(跨域)
www.abc.com/index.html調用www.abc.com:81/service.php(跨域)
www.abc.com/index.html調用http://www.abc.com/service.php(跨域)
解釋子域名
如主域名:abc.com,它之下的子域名有多種:
bbs.abc.com
Beijing.bbs.abc.com
Haidian.beijing.bbs.abc.com
處理跨域方法———代理
通過在同域名的web服務器端創建一個代理:
北京服務器(域名:www.beijing.com)
上海服務器(域名: www.shanghai.com)
比如在北京的web服務器的後臺(www.beijing.com/proxy-shanghaiservice.php)來調用上海服務器(www.shanghai.com/service.php)的服務,然後再把響應結果返回給前端,這樣前端調用北京同域名的服務就和調用上海的服務效果相同了。
處理跨域方法二—JSONP
JSONP可用於解決主流瀏覽器的跨域數據訪問的問題。
在www.aaa.com頁面中:
<script>
function jsonp(json) {
alert(json[“name”]);
}
</script>
<script src= “http://www.bbb.com/jsonp.js”></script>
在www.bbb.com頁面中:jsonp({‘name’:’洪七’,’age’:24});
注意:JSONP只能對GET請求起到效果,不支持POST方式
處理跨域方法三—XHR2
HTML5提供的XMLHttpRequest Level2已經實現了跨域訪問以及其他的一些新功能。
IE10以下版本都不支持
在服務器端做一些小小的改造即可:
header(‘Access-Control-Allow-Origin:*’); *: 所有的域都可以訪問
header(‘Access-Control-Allow-Methods:POST,GET’);