使用jQuery實現跨域提交表單數據


我們在WEB開發中有時會遇到這種情況,比如要從A網站收集用戶信息,提交給B網站處理,這個時候就會涉及到跨域提交數據的問題。本文將給您介紹如何使用jQuery來實現異步跨域提交表單數據。
 

在jQuery中,我們使用json數據類型,通過getJSON方法來實現從服務端獲取或發送數據,而當要向不同遠程服務器端提交或者獲取數據時,要采用jsonp數據類型。使用這種類型的話,會創建一個查詢字符串參數 callback=? ,這個參數會加在請求的URL后面。服務器端應當在JSON數據前加上回調函數名,以便完成一個有效的JSONP請求。如果要指定回調函數的參數名來取代默認的callback。

注意,JSONP是JSON格式的擴展。他要求一些服務器端的代碼來檢測並處理查詢字符串參數。

HTML

在本例中,為了演示跨域提交數據,我們假設A網站域名為www.helloweba.com,B網站域名為demo.helloweba.com。我們在A網站創建一個簡單的表單,用於提交用戶信息。

<form id="myform" action="#" method="post"> 
   <p><label>姓名:</label><input type="text" class="input" name="username" /></p> 
   <p><label>性別:</label><input type="radio" name="sex" value="1" checked="checked" /> 男生 
    <input type="radio" name="sex" value="2" /> 女生 </p> 
   <p><label>年齡:</label><input type="text" class="input" name="age" /></p> 
   <p><input type="submit" class="btn" value="提 交" /></p> 
</form>  

jQuery

當用戶填寫完畢表單並點擊“提交”按鈕時,使用jQuery獲取表單信息,並通過getJSON提交給B網站,請看代碼:

$(function(){ 
    $("#myform").submit(function(){ 
        var data = $(this).serialize(); //序列化表單數據 
        $.getJSON("http://demo.helloweba.com/jsonp.php?callback=?",data,function(json){ 
            var msg = ''; 
            if(json){ 
               var  sex = json.sex==1? "男生":"女生"; 
               msg = "<div id='result'><strong>提交成功!</strong><br/>姓名: 
               "+json.username+"<br/>性別:"+sex+"<br/>年齡:"+json.age+"</div>" 
            }else{ 
               msg = "服務器忙,請稍候再試!"; 
            } 
            $("#myform").after(msg); //將返回信息插入頁面對應的元素后 
        }); 
        return false; 
    }); 
}); 

從代碼中可以看出,首先將表單數據序列化,獲得json格式的表單數據,然后通過getJSON將數據發送給B網站URL:http://demo.helloweba.com/jsonp.php?callback=?,注意URL后面有個callback=?,將請求轉換為一個JSONP請求。然后根據B網站處理結果響應,並將響應結果動態顯示在A網站的表單提交頁面。

PHP

本例中,B網站的jsonp.php程序獲取A網站提交過來的表單數據,並將數據進行必要的處理(如有需要,可將數據過濾並插入數據庫中),然后返回JSON格式的數據給A網站的表單提交頁面。

$result['username'] = $_GET['username']; 
$result['sex'] = $_GET['sex']; 
$result['age'] = $_GET['age']; 
echo $_GET['callback'].'('.json_encode($result).')'; 

如果處理成功,會返回這樣一串字符串:jsonp1331385001001({"username":"\u5929\u70ed\u7279","sex":"1","age":"28"})。

在很多地方應用到跨域提交數據技術,那么跨域上傳附件(如圖片等),是不是也可以用getJSON來實現呢?


免責聲明!

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



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