整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          $.ajax()常用方法詳解(推薦)

          JAX 是一種與服務器交換數據的技術,可以在補充在整個頁面的情況下更新網頁的一部分。接下來通過本文給大家介紹ajax一些常用方法,大家有需要可以一起學習。

          1.url:

          要求為String類型的參數,(默認為當前頁地址)發送請求的地址。

          2.type:

          要求為String類型的參數,請求方式(post或get)默認為get。注意其他http請求方法,例如put和delete也可以使用,但僅部分瀏覽器支持。

          3.timeout:

          要求為Number類型的參數,設置請求超時時間(毫秒)。此設置將覆蓋$.ajaxSetup()方法的全局設置。

          4.async:

          要求為Boolean類型的參數,默認設置為true,所有請求均為異步請求。如果需要發送同步請求,請將此選項設置為false。注意,同步請求將鎖住瀏覽器,用戶其他操作必須等待請求完成才可以執行。


          5.cache:

          要求為Boolean類型的參數,默認為true(當dataType為script時,默認為false),設置為false將不會從瀏覽器緩存中加載請求信息。

          6.data:

          要求為Object或String類型的參數,發送到服務器的數據。如果已經不是字符串,將自動轉換為字符串格式。get請求中將附加在url后。防止這種自動轉換,可以查看 processData選項。對象必須為key/value格式,例如{foo1:"bar1",foo2:"bar2"}轉換為&foo1=bar1&foo2=bar2。如果是數組,JQuery將自動為不同值對應同一個名稱。例如{foo:["bar1","bar2"]}轉換為&foo=bar1&foo=bar2。

          7.dataType:

          要求為String類型的參數,預期服務器返回的數據類型。如果不指定,JQuery將自動根據http包mime信息返回responseXML或responseText,并作為回調函數參數傳遞。可用的類型如下:

          xml:返回XML文檔,可用JQuery處理。

          html:返回純文本HTML信息;包含的script標簽會在插入DOM時執行。

          script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),所有post請求都將轉為get請求。

          json:返回JSON數據。

          jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換后一個“?”為正確的函數名,以執行回調函數。

          text:返回純文本字符串。

          8.beforeSend:

          要求為Function類型的參數,發送請求前可以修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中如果返回false可以取消本次ajax請求。XMLHttpRequest對象是惟一的參數。

          function(XMLHttpRequest){

          this; //調用本次ajax請求時傳遞的options參數

          }

          9.complete:

          要求為Function類型的參數,請求完成后調用的回調函數(請求成功或失敗時均調用)。參數:XMLHttpRequest對象和一個描述成功請求類型的字符串。

          function(XMLHttpRequest, textStatus){

          this; //調用本次ajax請求時傳遞的options參數

          }

          10.success:

          要求為Function類型的參數,請求成功后調用的回調函數,有兩個參數。

          (1)由服務器返回,并根據dataType參數進行處理后的數據。

          (2)描述狀態的字符串。

          function(data, textStatus){

          //data可能是xmlDoc、jsonObj、html、text等等

          this; //調用本次ajax請求時傳遞的options參數

          }

          11.error:

          要求為Function類型的參數,請求失敗時被調用的函數。該函數有3個參數,即XMLHttpRequest對象、錯誤信息、捕獲的錯誤對象(可選)。ajax事件函數如下:

          function(XMLHttpRequest, textStatus, errorThrown){

          //通常情況下textStatus和errorThrown只有其中一個包含信息

          this; //調用本次ajax請求時傳遞的options參數

          }

          12.contentType:

          要求為String類型的參數,當發送信息至服務器時,內容編碼類型默認為"application/x-www-form-urlencoded"。該默認值適合大多數應用場合。

          13.dataFilter:

          要求為Function類型的參數,給Ajax返回的原始數據進行預處理的函數。提供data和type兩個參數。data是Ajax返回的原始數據,type是調用jQuery.ajax時提供的dataType參數。函數返回的值將由jQuery進一步處理。

          function(data, type){

          //返回處理后的數據

          return data;

          }

          14.dataFilter:

          要求為Function類型的參數,給Ajax返回的原始數據進行預處理的函數。提供data和type兩個參數。data是Ajax返回的原始數據,type是調用jQuery.ajax時提供的dataType參數。函數返回的值將由jQuery進一步處理。

          function(data, type){

          //返回處理后的數據

          return data;

          }

          15.global:

          要求為Boolean類型的參數,默認為true。表示是否觸發全局ajax事件。設置為false將不會觸發全局ajax事件,ajaxStart或ajaxStop可用于控制各種ajax事件。

          16.ifModified:

          要求為Boolean類型的參數,默認為false。僅在服務器數據改變時獲取新數據。服務器數據改變判斷的依據是Last-Modified頭信息。默認值是false,即忽略頭信息。

          17.jsonp:

          要求為String類型的參數,在一個jsonp請求中重寫回調函數的名字。該值用來替代在"callback=?"這種GET或POST請求中URL參數里的"callback"部分,例如{jsonp:'onJsonPLoad'}會導致將"onJsonPLoad=?"傳給服務器。

          18.username:

          要求為String類型的參數,用于響應HTTP訪問認證請求的用戶名。

          19.password:

          要求為String類型的參數,用于響應HTTP訪問認證請求的密碼。

          20.processData:

          要求為Boolean類型的參數,默認為true。默認情況下,發送的數據將被轉換為對象(從技術角度來講并非字符串)以配合默認內容類型"application/x-www-form-urlencoded"。如果要發送DOM樹信息或者其他不希望轉換的信息,請設置為false。

          21.scriptCharset:

          要求為String類型的參數,只有當請求時dataType為"jsonp"或者"script",并且type是GET時才會用于強制修改字符集(charset)。通常在本地和遠程的內容編碼不同時使用。

          案例代碼:

          $(function(){

          $('#send').click(function(){

          $.ajax({

          type: "GET",

          url: "test.json",

          data: {username:$("#username").val(), content:$("#content").val()},

          dataType: "json",

          success: function(data){

          $('#resText').empty(); //清空resText里面的所有內容

          var html = '';

          $.each(data, function(commentIndex, comment){

          html += '<div class="comment"><h6>' + comment['username']

          + ':</h6><p class="para"' + comment['content']

          + '</p></div>';

          });

          由于在工作中需要使用AJAX請求其他域名下的請求,但是會出現拒絕訪問的情況,這是因為基于安全的考慮,AJAX只能訪問本地的資源,而不能跨域訪問。

          比如說你的網站域名是aaa.com,想要通過AJAX請求bbb.com域名中的內容,瀏覽器就會認為是不安全的,所以拒絕訪問。

          會出現跨域問題的幾種情況:

          后臺在百度上尋找解決方案解決了這個問題,一共總結出三種方案:代理、JSONP、XHR2(XMLHttpRequestLevel2)。

          第一種方法代理:這種方式是通過后臺(ASP、PHP、JAVA、ASP.NET)獲取其他域名下的內容,然后再把獲得內容返回到前端,這樣因為在同一個域名下,所以就不會出現跨域的問題。

          實現代碼:創建一個AJAX請求(頁面地址為:http://localhost/ajax/proxy.html)

              var request = null;
              if(window.XMLHttpRequest){
                  request = new XMLHttpRequest;
              }else{
                  request = new ActiveXObject("Microsoft.XMLHttp");
              }
              request.onreadystatechange = function{
                  console.log(this.readyState);
                  if(this.readyState===4 && this.status===200){
           var resultObj = eval("("+this.responseText+")");    //將返回的文本數據轉換JSON對象
           document.getElementById("box").innerHTML = resultObj.name+":"+resultObj.sex;    //將返回的內容顯示在頁面中
                  }
              }
              request.open("POST","proxy.php",true);
              request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
              request.send("name=呂銘印&sex=男");
          1234567891011121314151617復制代碼類型:[javascript]

          創建AJAX請求。

          proxy.php代碼

          header("Content-type:text/html;charset=utf-8");
          $url = "http://localhost:63342/ajax/proxy.js";
          $contents = file_get_contents($url);
          echo $contents;1234復制代碼類型:[javascript]

          使用php代碼獲取localhost:63342下的proxy.js文件。

          proxy.js代碼

          proxy.html運行結果

          至此,使用代理實現了訪問不同域之間的文件。

          首先在proxy.html使用AJAX訪問后臺的proxy.php文件,然后proxy.php接收到請求之后去訪問localhost:63342中的proxy.js文件,獲取到proxy.js的內容后,將內容返回到前端頁面,這就實現了跨域的功能。

          如果要訪問多個跨域文件,可以以參數的形式告訴后臺proxy.php文件要訪問的文件的地址。

          第二種方法JSONP(只支持GET請求):后來人們發現,在調用Js文件的時候不受跨域的影響,這樣就衍生了第二種方案。

          就是在遠程服務器端把數據裝入js文件中,供客戶端調用和進一步處理。

          jsonp.html
          
              var url = "http://localhost:63342/ajax/jsonp.php?name=呂銘印&sex=男&callbackname=jsonp_callback"; //訪問localhost:63342下的jsonp.php
              var scriptTag = document.createElement("script");   //創建一個script標簽
              scriptTag.setAttribute("src",url);  //設置script的src屬性
              document.body.appendChild(scriptTag);   //將script標簽添加到body中
              //回調函數
              var jsonp_callback = function(resultObj){
                  document.getElementById("box").innerHTML = resultObj.name+":"+resultObj.sex;
              }
          jsonp.php
          
          $name = $_GET["name"];
              $sex = $_GET["sex"];
              $callbackname = $_GET["callbackname"];    //回調函數名稱
              echo "$callbackname({name:'$name',sex:'$sex'})";12345678910111213141516復制代碼類型:[javascript]

          jsonp.html運行結果:

          實現原理:由于使用script標簽調用遠程js文件沒有不受跨域的影響,所以可以通過創建一個script標簽,通過src屬性來訪問遠程文件。

          其實這并不屬于AJAX,但是可以實現類似AJAX的功能。

          第三種方法XMLHttpRequestLevel2:HTML5提供的XMLHttpRequestLevel2已經實現了跨域訪問以及其他的一些新功能

          這需要在遠程服務器端添加如下代碼

          這樣在客戶端使用常規的AJAX代碼即可。

          jax提交含有html數據時的處理方法,當請求參數中含有html便簽內容,系統無法進行提交,可以在前臺加密,后臺解密即可。具體操作如下:

          前臺(js)

          function ajax_encode(str)
          {
              str = str.replace(/%/g,"{@bai@}");
              str = str.replace(/ /g,"{@kong@}");
              str = str.replace(/</g,"{@zuojian@}");
              str = str.replace(/>/g,"{@youjian@}");
              str = str.replace(/&/g,"{@and@}");
              str = str.replace(/\"/g,"{@shuang@}");
              str = str.replace(/\'/g,"{@dan@}");
              str = str.replace(/\t/g,"{@tab@}");
              str = str.replace(/\+/g,"{@jia@}");
              return str;
          }12345678910111213復制代碼類型:[html]

          后臺(java)

          public static String ajax_decode(String str, Boolean bsql)
            {
                str = str.replace("{@bai@}", "%");
                str = str.replace("{@dan@}", "'");
                str = str.replace("{@shuang@}", "\"");
                str = str.replace("{@kong@}", " ");
                str = str.replace("{@zuojian@}", "<");
                str = str.replace("{@youjian@}", ">");
                str = str.replace("{@and@}", "&");
                str = str.replace("{@tab@}", "\t");
                str = str.replace("{@jia@}", "+");
                if(bsql) str = str.replace("'", "''");
                return str;
            }1234567891011121314復制代碼類型:[html]

          這樣請求可以正常發送!

          「鏈接」


          主站蜘蛛池模板: 视频在线观看一区二区三区| 精品视频一区在线观看| 日韩精品无码一区二区三区四区| 一区二区3区免费视频| 麻豆AV一区二区三区久久| 亚洲国产AV一区二区三区四区 | 国模无码一区二区三区| 久久精品一区二区免费看| 一区在线观看视频| 日韩福利视频一区| 日韩一区二区视频| 任你躁国语自产一区在| 国产另类TS人妖一区二区| 精品一区二区无码AV| 动漫精品专区一区二区三区不卡| 无码少妇丰满熟妇一区二区| 色婷婷一区二区三区四区成人网| 中文字幕一区二区区免| 国产aⅴ精品一区二区三区久久| 亚洲另类无码一区二区三区| 欧洲无码一区二区三区在线观看 | 亚洲一区在线视频| 久久久精品人妻一区二区三区蜜桃 | 国产高清视频一区二区| 日韩国产精品无码一区二区三区| 熟女大屁股白浆一区二区| 一区二区国产精品| 色一情一乱一伦一区二区三区| 亚洲A∨精品一区二区三区下载| 在线精品一区二区三区| 欧美激情国产精品视频一区二区 | 精品久久久久一区二区三区| 日本一区二区三区在线视频| 白丝爆浆18禁一区二区三区| 国产成人精品一区二区三在线观看| 精品国产日韩亚洲一区91| 午夜性色一区二区三区不卡视频 | 中文字幕一区二区人妻| 日本中文字幕一区二区有码在线| 无码人妻精品一区二区三18禁| 久久国产精品最新一区|