web進階之二十七:json、ajax、jsonp

json

??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文件調用頁面上定義的函數,通過參數把數據傳進去。


實例代碼

ajax的簡單書寫

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax</title>
    <style type="text/css">
        
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $.ajax({
            url: './json.json',//請求的服務器的路徑,實際開發中,用于寫文檔接口,如果是當前目錄一定要加./
            // type: 'default GET (Other values: POST)',//請求的方式
            /*小型數據,切安全系數不需要很高的用get
                大型數據,且安全系數高的,用post*/
            type: 'get',
            // dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',//訪問的數據類型是什么類型
            dataType: 'json',
            // data: {param1: 'value1'},//攜帶的參數
        })
        // .done(function() {//成功時候要執行什么,可以寫一個相應的函數
        //  console.log("success");
        // })
        .done(function(data) {//成功時候要執行什么
            console.log(data[0].name);
        })
        .fail(function() {//失敗的時候要執行的
            console.log("error");
        })
        .always(function() {//無論成功與否,都要執行。
            console.log("complete");
        });
        
    </script>
</head>
<body>
    
</body>
</html>
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容