1. 程式人生 > >json,ajax與jsonp:(七)

json,ajax與jsonp:(七)

17:json 18:ajax與jsonp 19:本地儲存 20:jqueryUI

目錄十七

josn

json是 JavaScript Object Notation 的首字母縮寫,單詞的意思是javascript物件表示法,這裡說的json指的是類似於javascript物件的一種資料格式,目前這種資料格式比較流行,逐漸替換掉了傳統的xml資料格式。

javascript物件字面量:

var tom = {
    name:'tom',
    age:18
}

json格式的資料:

{
    "name":'tom',
    "age":18
}

與json物件不同的是,json資料格式的屬性名稱需要用雙引號引起來,用單引號或者不用引號會導致讀取資料錯誤。

json的另外一個數據格式是陣列,和javascript中的陣列字面量相同。

['tom',18,'programmer']

目錄十八

ajax與jsonp

ajax技術的目的是讓javascript傳送http請求,與後臺通訊,獲取資料和資訊。ajax技術的原理是例項化xmlhttp物件,使用此物件與後臺通訊。ajax通訊的過程不會影響後續javascript的執行,從而實現非同步。

同步和非同步

現實生活中,同步指的是同時做幾件事情,非同步指的是做完一件事後再做另外一件事,程式中的同步和非同步是把現實生活中的概念對調,也就是程式中的非同步指的是現實生活中的同步,程式中的同步指的是現實生活中的非同步。

區域性重新整理和無重新整理

ajax可以實現區域性重新整理,也叫做無重新整理,無重新整理指的是整個頁面不重新整理,只是區域性重新整理,ajax可以自己傳送http請求,不用通過瀏覽器的位址列,所以頁面整體不會重新整理,ajax獲取到後臺資料,更新頁面顯示資料的部分,就做到了頁面區域性重新整理。

同源策略

ajax請求的頁面或資源只能是同一個域下面的資源,不能是其他域的資源,這是在設計ajax時基於安全的考慮。特徵報錯提示:

XMLHttpRequest cannot load https://www.baidu.com/. No  
'Access-Control-Allow-Origin'
header is present on the requested resource. Origin 'null' is therefore not allowed access.

$.ajax使用方法

常用引數: 1、url 請求地址 2、type 請求方式,預設是’GET’,常用的還有’POST’ 3、dataType 設定返回的資料格式,常用的是’json’格式,也可以設定為’html’ 4、data 設定傳送給伺服器的資料 5、success 設定請求成功後的回撥函式 6、error 設定請求失敗後的回撥函式 7、async 設定是否非同步,預設值是’true’,表示非同步

以前的寫法:

$.ajax({
    url: 'js/user.json',
    type: 'GET',
    dataType: 'json',
    data:{'aa':1}
    success:function(data){
        ......
    },
    error:function(){
        alert('伺服器超時,請重試!');
    }
});

新的寫法(推薦):

$.ajax({
    url: 'js/user.json',
    type: 'GET',
    dataType: 'json',
    data:{'aa':1}
})
.done(function(data) {
    ......
})
.fail(function() {
    alert('伺服器超時,請重試!');
});

jsonp

ajax只能請求同一個域下的資料或資源,有時候需要跨域請求資料,就需要用到jsonp技術,jsonp可以跨域請求資料,它的原理主要是利用了script標籤可以跨域連結資源的特性。

jsonp的原理如下:

<script type="text/javascript">
    function aa(dat){
        alert(dat.name);
    }
</script>
<script type="text/javascript" src="....../js/data.js"></script>

頁面上定義一個函式,引用一個外部js檔案,外部js檔案的地址可以是不同域的地址,外部js檔案的內容如下:

aa({"name":"tom","age":18});

外部js檔案呼叫頁面上定義的函式,通過引數把資料傳進去。