前后台交互之傳參方式


前台向后台傳參,一般有如下幾種方式:

一、URL方式傳參

1、使用這種方式時,參數接在url后面,用?分隔,如果有多個參數,各參數間用 & 連接。get方式請求時可以使用URL方式傳參。

巴特URL傳參在應用時也有缺陷:

1.1 參數長度限制:

(1)IIS 7 對 Query String 有長度限制;默認:2048 ;(2)IE瀏覽器對URL的長度現限制為2048字節;(3)360極速瀏覽器對URL的長度限制為2118字節;(4)Firefox(Browser)對URL的長度限制為65536字節;

(5)Safari (Browser) 對URL的長度限制為80000字節;(6)Opera (Browser) 對URL的長度限制為190000字節;(7)Google (chrome) 對URL的長度限制為8182字節。

1.2 傳遞 bean 時很麻煩:

有種劣質方法可以辦到,就是將bean的屬性均需作為一個參數連接到url里傳遞。 
比如要傳遞一個人這個類(有身高和性別)到后台, 前台:var pepole = {age:22,sex:'male'}    要是直接把pepole拼接到url里:url?pepole=pepole,后台在不設置struts參數解析攔截器時,以string接收將會是一個object Object。 
假如后台action里聲明的是這個bean類型屬性,可以實現的方式是:url?pepole.age=22&pepole.sex=male   (注:URL里點后面的age和sex最好跟pepole的age和sex大小寫相同! )
這樣后台就直接接收到了一個bean。 但是,如果bean屬性很多,這讓前台情何以堪? 所以,這種方法適合bean屬性少的情況,且不追求優雅的代碼規范下寫。

2、使用示例:

eg1、點擊 button 按鈕,觸發 onclick 事件,執行 Go() 方法,跳轉到 localhost:21811/Handler1.ashx 頁面,同時傳遞了 id 和 name 兩個參數。

<input type="button" onclick="Go()" value="通過js方法傳遞參數" /> 
function Go() { 
      window.location.href="localhost:21811/Handler1.ashx?id=1&name='abc'" 
    } 

eg2、用超鏈接的 href 傳遞參數,當點擊超鏈接的時候,首先會跳轉到 localhost:21811/Handler1.ashx 頁面,然后還會傳遞 id 和 name 兩個參數。

<a href="localhost:21811/Handler1.ashx?id=1&name='abc'">超鏈接傳遞參數</a>

二、JQuery Ajax 方式傳遞

jquery 中 ajax 只需配置相應的參數即可與后台交互。這種方式可傳遞大數值的數據。

1、get方式

$.ajax({
            type: "get",     //數據發送的方式
            url: "",         //要發送的后台地址
            data: {val1:"1",val2:"2"},  //要發送的數據(參數)
            dataType: "json",   //后台處理后返回的數據格式
            success: function (data) {
                              //ajax請求成功后觸發
                             alert('請求成功');
                          },
            error: function (msg) {
                             //ajax請求失敗后觸發
                             alert(msg);//彈出錯誤信息
                          }
        });

后台接收數據(參數):

<?php
    val1 = $_GET['val1'];  //1
    val2 = $_GET['val2'];  //2
?>

data必須是對象類型,比如data:{"name":"zhangsan"},后台通過 request.getParameter("name")就能接收到name的值。

2、post方式

$.post(url,data,success(data, textStatus, jqXHR),dataType)

url:必需。規定把請求發送到哪個 URL。           data:可選。映射或字符串值。規定連同請求發送到服務器的數據。

success(data, textStatus, jqXHR):可選。請求成功時執行的回調函數。          dataType :可選。規定預期的服務器響應的數據類型。默認執行智能判斷(xml、json、script 或 html)。

例:

 $.post( "demo_test_post.asp", //傳遞到服務器的值
 { name:"Donald Duck", city:"Duckburg" }, //回調函數
           function(data,status){ alert("Data: " + data + "\nStatus: " + status); });

三、form的post方式 (傳統form表單提交)

1、序列化表單值

通過序列化表單值,創建 url 編碼文本字符串。

<form id="myForm" action="Handler1.ashx" method="get"> <!-- action里面的連接不能帶參數的 -->
<input type="text" name="id" value="3" /> <input type="text" name="name" value="abc" /> <!-- input必須有name屬性 --> <input type="submit" value="序列化表單值" /> <!-- 必須是type="submit" --> </form>

 序列化之后的結果:id=3&name=abc     點擊提交按鈕之后將序列化后的字符串提交到 action 對應的接口。

2、上面傳統的form表單提交會導致頁面刷新,如果不希望頁面刷新,可使用 ajax 進行請求

$.ajax({
     url:"  .php",
     type:"POST",
     data:$("#myForm").serialize(),             // JQ Ajax serialize() 序列化表單值
     success:function(data){
         alert(data);
     },
     error:function(data){                           
alert(data.status+":"+data.statusText+":"+data.responseText); } });

不過,上述方式只適用於傳遞一般簡單的參數,像文件流就無法被序列化並傳遞。所以,文件(文件,圖片類)上傳的時候可使用 FormData,FormData 可以輕松的和 Ajax 結合進行文件上傳。

關於 FormData 的使用,可以看我的另一篇隨筆:  H5 FormData對象的使用——進行Ajax請求並上傳文件

四、H5 的 WebSocket 

客戶端與服務端使用 WebSocket 建立連接后,可以實時通信,關於 WebSocket 的使用介紹,可以看我的另一篇隨筆:JavaScript WebSocket 使用總結

五、總結:

1、jquery ajax 的 get 和 post 方式比較:

(1)get是把參數數據隊列加到提交表單的action屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。

       post是通過 HTTP post 機制,將表單內各個字段與其內容放置在HTML header內一起傳送到action屬性所指的URL地址。用戶看不到這個過程。

(2)對於get方式,服務器端用Request.QueryString獲取變量的值。

       對於post方式,服務器端用Request.Form獲取提交的數據。兩種方式的參數都可以用Request來獲得。

(3)get傳送的數據量較小,不能大於2KB(不同瀏覽器也有不同限制)。

        post傳送的數據量較大,一般被默認為不受限制。(理論上,因服務器的不同而異)

(4)get安全性非常低,post安全性較高。

(5)<form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一樣的,也就是說,method為get時action頁面后邊帶的參數列表會被忽視。

       而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一樣的。

2、特性:

(1)Get請求有如下特性:

       它會將數據添加到URL中,通過這種方式傳遞到服務器,通常利用一個問號?代表URL地址的結尾與數據參數的開端,后面的參數每一個數據參數以“名稱=值”的形式出現,參數與參數之間利用一個連接符&來區分。

(2)Post請求有如下特性:

       數據是放在HTTP主體中的,其組織方式不只一種,有&連接方式,也有分割符方式,可隱藏參數,傳遞大批數據,比較方便。

即:get在 URL 請求里面附帶了表單參數和值,post在 HTTP 請求的消息實體中。

3、使用 ajax 方式時,無論是 get 還是 post,設置參數  dataType: "json",  時,如果用的是jQuery之類的框架,只要是符合Json格式的字符串就會自動轉換為Json對象,就不用 使用 eval() 或者 JSON.parse()  方法將字符串轉換為 json 對象了。

 


免責聲明!

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



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