jQuery發送Ajax請求


概述

Ajax用於瀏覽器與服務器通信而無需刷新整個頁面,服務器將不再返回整個頁面,而是返回少量數據,通過JavaScript DOM更新一部分節點。期間數據傳輸可采用xml,json等格式,Ajax最早用於谷歌的搜索提示。

其實不刷新整個頁面便可與服務器通信的方法有很多,比如Flash,Java applet,iframe等,但Ajax是目前最為常見的一種。

我們可以使用JavaScript擴展對象XMLHttpRequest實現Ajax,對於這種方法在這里不做介紹,下面直接了解jQuery實現Ajax的幾種方法。

數據格式

 

瀏覽器與服務器之間傳輸數據所采用的格式,比較常見的有xml,html,text,json,jsonp等,目前json由於占用更小存儲,且是JavaScript原生格式,因此很受歡迎。 

 

當確定數據傳輸采用json格式后,下面就需要考慮序列化問題了。

網絡中傳輸的都是文本字符串(其實是二進制比特流,這里方便理解),因此在向網絡通道中寫入數據時,都需要先序列化json對象為文本字符串。而從網絡通道中讀取數據時,都需要反序列化文本字符串為json對象。在Python中json.dumps用於序列化,json.loads用於反序列化。

如果確定數據格式是json,JS也需對服務器返回的數據進行反序列化,即把json樣式的字符串變成json對象。 

var json_str = '{"result": "hello, world!"}';
var json_object = eval("(" + json_str + ")");  // 法一,使用eval函數,注意括號
var json_object = jQuery.parseJSON(json_str);  // 法二,使用jQuery的parseJSON函數
 
alert(json_object.result);                     // 反序列化成功,輸出結果

  

下面就引出jQuery中發送Ajax請求的幾個常見方法。



$.ajax()

 

該方法用於執行Ajax請求,常用於其他jQuery Ajax方法不能完成的請求,也許我們可以把它稱為"jQuery中Ajax系列方法之母"。

形式:$.ajax({name:val, name:val,...});
可選字段:
1)url:鏈接地址,字符串表示
2)data:需發送到服務器的數據,GET與POST都可以,格式為{A: '...', B: '...'}
3)type:"POST" 或 "GET",請求類型
4)timeout:請求超時時間,單位為毫秒,數值表示
5)cache:是否緩存請求結果,bool表示
6)contentType:內容類型,默認為"application/x-www-form-urlencoded"
7)dataType:服務器響應的數據類型,字符串表示;當填寫為json時,回調函數中無需再對數據反序列化為json
8)success:請求成功后,服務器回調的函數
9)error:請求失敗后,服務器回調的函數
10)complete:請求完成后調用的函數,無論請求是成功還是失敗,都會調用該函數;如果設置了success與error函數,則該函數在它們之后被調用
11)async:是否異步處理,bool表示,默認為true;設置該值為false后,JS不會向下執行,而是原地等待服務器返回數據,並完成相應的回調函數后,再向下執行
12)username:訪問認證請求中攜帶的用戶名,字符串表示
13)password:返回認證請求中攜帶的密碼,字符串表示
不知道將最后兩個放到data中去,是不是密碼會以明文展示,因沒有嘗試過,這里不敢下結論。


舉例: 

$.ajax({
    url: "/greet",
    data: {name: 'jenny'},
    type: "POST",
    dataType: "json",
    success: function(data) {
        // data = jQuery.parseJSON(data);  //dataType指明了返回數據為json類型,故不需要再反序列化
        ...
    }
});

  

$.post()

 

該方法使用POST方式執行Ajax請求,從服務器加載數據。

形式:$.post(url, data, func, dataType);
可選參數:
1)url:鏈接地址,字符串表示
2)data:需要發送到服務器的數據,格式為{A: '...', B: '...'}
3)func:請求成功后,服務器回調的函數;function(data, status, xhr),其中data為服務器回傳的數據,status為響應狀態,xhr為XMLHttpRequest對象,個人感覺關注data參數即可
4)dataType:服務器返回數據的格式


舉例: 

$.post(
    "/greet",
    {name: 'Brad'},
    function(data) {
        ...
    },
    "json"
);

  

$.get()

 

該方法使用GET方式執行Ajax請求,從服務器加載數據。

形式:$.get(url, data, func, dataType);
其各個參數所示意義與$.post()一致,在此不再列出,唯一區別就是請求類型是GET。


舉例: 

$.get(
    "/greet",
    {name: 'Brad'},
    function(data) {
        ...
    },
    "json"
);

  

上面三個是jQuery中發送Ajax請求較為重要的方法,下面再選擇三個較為常見的方法,簡單做解釋。 

 

$.getJSON()

 

該方法使用GET方式執行Ajax請求,從服務器加載JSON格式數據。

形式:$.getJSON(url, data, func);

 

因為確定服務器返回json編碼的數據,故相較於$.get()不必再指定dataType。


舉例: 

$.getJSON(
    "/greet",
    {name: 'jenny'},
    function(data) {
        ...
    }
);

  

$.load()

 

該方法將服務器加載的數據直接插入到指定DOM中。

形式:$.load(url, data, func);

其中data如果存在則使用POST方式發送請求,不存在則使用GET方式發送請求。

 

舉例:

<div id="ret"></div>
$('#ret').load(
    "/greet",
    {name: 'Brad'}
);

  

$.getScript()

 

該方法使用GET方式執行Ajax請求,從服務器加載並執行回傳的JavaScript。

形式:$.load(url, func);

 

 

<html>
<body>
<button οnclick="login1()">發送1</button>
<button οnclick="login2()">發送2</button>
<button οnclick="login3()">發送3</button>
<button οnclick="login4()">發送4</button>
<button οnclick="login5()">發送5</button>
<div id="ret"></div>
<script type="text/javascript" src="{{ url_for('static', filename='jquery.min.js') }}"></script>
<script type="text/javascript">
    function login1() {
        $.ajax({
            url: "{{ url_for('greet') }}",
            data: {name: 'jenny'},
            type: "POST",
            //dataType: "json",
            success: function(data) {
                // data = eval("(" + data+ ")");
                data = jQuery.parseJSON(data);  // dataType注釋了,故注意反序列化
                $("#ret").text(data.result);
            }
        });
    }
 
    function login2() {
        $.get(
            "{{ url_for('greet') }}",
            {name: 'Brad'},
            function(data) {
                $("#ret").text(data.result);
            },
            "json"
        );
    }
 
    function login3() {
        $.getJSON(
            "{{ url_for('greet') }}",
            {name: 'jenny'},
            function(data) {
                $("#ret").text(data.result);
            }
        );
    }
 
    function login4() {
        $.post(
            "{{ url_for('greet') }}",
            {name: 'Brad'},
            function(data) {
                $('#ret').text(data.result);
            },
            "json"
        );
    }
 
    function login5() {
        $('#ret').load(
            "{{ url_for('greet') }}",
            {name: 'Brad'}
        );
    }
 
</script>
</body>
</html>

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM