用jQuery實現ajax總結以及跨域問題


本文為作者原創,未經博主允許,不可轉載

ajax請求的常用的參數設置:

type:請求類型,"POST","GET",默認為get
url:發送請求的地址
data:是一個對象,聯通請求發送到服務器的數據,表單數據($("#addForm").serialize())或formData(文件上傳時用到)
dataType:預期服務器返回的數據類型。如果不指定,jQuery將自動根據http包MIME信息來智能判斷,一般我們采用json格式,
         可以設置為“json”,也可以設置為xml,(后面講解)
success:是一個方法,請求成功后的回調函數,傳入返回后的數據,以及包含成功代碼的字符串
error:是一個方法,請求失敗時調用此函數,傳入XMLHTTPRequest對象。

 

        什么地方會用到ajax,一般用ajax是為了頁面異步刷新,在不刷新頁面的情況下,異步到后台去請求數據,

並根據得到的數據做出想要的處理或操作,比如:提交form表單,進行文件上傳,刷新表單數據等。

        ajax請求有兩種方式:即type:get或post兩種,一般為post。兩種的主要區別為:

GET請求會將參數跟在URL后進行傳遞,而POST請求則是作為HTTP消息的實體內容發送給WEB服務器。當然在Ajax請求中,這種區別對用戶是不可見的。

 

另外ajax常用的屬性和方法為:

1.responseText :獲得字符串形式的響應數據
2.responseXML: 獲得XML形式的響應數據
3.status 和 statusText: 以數字和文本形式返回http狀態碼
4.getResponseHeader() : 查詢響應中的某個字段的值
5.getAllResponseHeader() :獲取所有的響應報頭

readyState屬性(監聽服務器連接及響應):
0:請求為初始化,
1.服務器連接已建立, open已經調用
2.請求已接收,也就是接收到頭消息了
3.請求處理中,也就是接收到響應主體了
4.請求已完成,且響應已就緒,也就是響應完成了

 

以下為使用的案例和跨域問題的研究

 

用jQuery的ajax進行form表單提交的案例為:

此處為get請求
$(document).ready(function(){
   $("#submit").click(function(){
       $.ajax({
           type:"GET",
           url:"",
           dataType:"json",
           success:function(data){
              if(data.success){
                   $("#searchResult").html(data.msg);
                 }
               else{
                    $("#searchResult").html("出現錯誤"+data.msg);
                 }
              alert("成功"),     
            }
           error:function(jqXHR){
               alert("發生錯誤"+jqXHR.status);
            }
       })
   })
})

post請求的案例為:

此處為post請求,需要加入data參數
$(document).ready(function(){
   $("#submit").click(function(){
       $.ajax({
           type:"POST",
           url:"",
           data:{
                 name:$("#name").val(),
                 password:$("#password").val(),
                 sex:$("#sex").val(),
                 number:$("#number").val(),
                 }
           dataType:"json",
           success:function(data){    //data為后台返回的數據
              if(data.success){
                   $("#searchResult").html(data.msg);
                 }
               else{
                    $("#searchResult").html("出現錯誤"+data.msg);
                 }
              alert("成功"),     
            }
           error:function(jqXHR){
               alert("發生錯誤"+jqXHR.status);
            }
       })
   })
})

       在工作應用當中,會有很多地方遇到ajax,用ajax請求返回的數據類型也會不一樣,有json格式,xml格式以及formData格式等。

json格式一般返回的為一個對象,

      當用json作為返回類型時,應用的案例為:

   function submitDemandForm(){
         $.ajax({
             url:"<%=basePath%>handPlay/demandVideoSubmit",
             type:"POST",
             data:$("#addDemandVideoForm").serialize(),
             dataType:'json',
             success:function(data){
                 console.info(data);
               //     alert("提交成功"+data.returnMsg);
               //調用上傳的方法
                 uploadPic();
                 uploadVideo();
                 submitValue = data.returnMsg;
                 console.info(data);
               },
               error:function(data){
                   if(data.status == "false"){
                    //   alert("提交失敗");
                       console.info(data);
                       submitValue = data.returnMsg;
                    
                   }
               } 
             
         })
     }

 

     當用formData作為請求對象時,是進行文件上傳時用到,其使用的方法為:

   function uploadPic(){
           var formData = new FormData();
           console.info(formData);
           formData.append("myfile",document.getElementById("file").files[0]);
           var uploadPicValue = "";
           $.ajax({
               url:"${uploadCoverUrl}",
               type:"POST",
               data:formData,
               contentType:false,
               dataType:'xml',
               /* 
                *必須false才會避開jQuery對formdata的處理
                */
               processData:false,
               success:function(data){
                       console.info(data);
                   //if(data.status == "true"){
                       alert("圖片上傳成功");
                       uploadPicValue = data.readyState;
                 //  }
                   if(data.status == "true"){
                       //alert("data.msg");
                       uploadPicValue = data.readyState;
                       $("#uploadPicBar").removeClass("active");
                       
                   }
               },
               error:function(data){
                      console.info(data);
                      // alert("圖片上傳失敗");
                       uploadPicValue = data.readyState;
                       //增加上傳失敗時的樣式
                       
                       //   document.getElementById("#uploadPicWord").innerHTML='上傳失敗';
                       $("#uploadPicWord").html('上傳失敗');
                    //   alert("uploadPicValue"+uploadPicValue);
               }
           })
       }

 

 

 

跨域問題:

當使用火狐調試時,報的異常為:

火狐瀏覽器錯誤提示:
 
http://localhost:8080/IMP/static/images/partners/partner_bg.png [HTTP/1.1 404 Not Found 5ms]
Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead[詳細了解]  jquery-1.9.1.min.js:1
Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead[詳細了解]  jquery-migrate-1.1.0.min.js:3
Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead[詳細了解]  jquery.js:1
所用的 getPreventDefault() 已不贊成使用。請改用 defaultPrevented。  jquery-1.9.1.min.js:3:31293
FormData {  }  sendLiveForm:139:5
已攔截跨源請求:同源策略禁止讀取位於 http://114.215.100.148:8060/image?prefix=abcd 的遠程資源。(原因:CORS 頭缺少 'Access-Control-Allow-Origin')。 (未知)
FormData {  }  sendLiveForm:139:5
FormData {  }  sendLiveForm:139:5
Security wrapper denied access to property (void 0) on privileged Javascript object.
 Support for exposing privileged objects to untrusted content via __exposedProps__ is being gradually removed - use WebIDL bindings or Components.utils.cloneInto instead.
 Note that only the first denied property access from a given global object will be reported.

異常解析及解決方案:

跨域:
1.當協議,子域名,主域名,端口號中任意一個不相同時,都算作不同域
2.不同域之間相互請求資源,就算做“跨域”
3.JavaScript處於安全方面的考慮,不允許跨域調用其他頁面的對象。什么是跨域呢,簡單的理解
   就是因為JavaScript同源策略的限制,a.com域名下的js無法操作b.com或是c.a.com域名下的對象

4.jsonp可用於解決主流瀏覽器的跨域數據訪問的問題...(具體需要上網,且該方法存在較強的局限性)
5。解決跨域方法--XHR2
   HTML5提供的XMLHttpRequest Level2 已經實現了跨域訪問以及其他的一些新功能
   IE10以下都不支持
   在服務器端在一些小小的改造即可
      header('Access-Control-Allow-Orign':*);
      header('Access-Control-Allow-Methods:POST,GET');


免責聲明!

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



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