1. 程式人生 > >前後臺互動傳參方式

前後臺互動傳參方式

前臺向後臺傳參

      主要有以下2種方式:

一、URL傳參

使用這種方式傳參時,收個引數置於url的後面,用“?”連線;形式:url?param=value,如果有多個引數,各個引數之間用&連線。

    如:http://zhidao.baidu.com/q?word=%D6%BD%B1%D2+%CB%BA%BB%D9 
    多個引數時,引數間用“&”連線, 
    例如:http://zhidao.baidu.com/q?word=%D6%BD%B1%D2+%CB%BA%BB%D9&lm=0&fr=search&ct=17&pn=0&tn=ikaslist&rn=10

url傳參很方便,但有缺陷:

    1、引數長度限制

    IE對於url的長度限制為2048個位元組,Google對於url的長度限制為8182個位元組,360瀏覽器url的長度限制為2118個位元組,而且單個引數的value值不得超過1920000個位元組。

     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。

 

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形式(傳統的表單提交)

 

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 結合進行檔案上傳。

五、總結:

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 物件了。