好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Ajax學習全套(最全最經典)

Ajax學習全套(最全最經典)

熱門標簽:機器人電銷騙局揭秘 硅語電話機器人公司 超級大富翁地圖標注 越南河內地圖標注 騰訊地圖標注位置能用多久 云呼外撥網絡電話系統 ai機器人電銷資源 地圖標注項目怎么樣 個人怎樣在百度地圖標注地名

ajax簡介

AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創建交互式網頁應用的網頁開發技術。Ajax不是一種新的編程語言,而是使用現有標準的新方法。AJAX可以在不重新加載整個頁面的情況下,與服務器交換數據。這種異步交互的方式,使用戶單擊后,不必刷新頁面也能獲取新數據。使用Ajax,用戶可以創建接近本地桌面應用的直接、高可用、更豐富、更動態的Web用戶界面。

Ajax包括:

 •XHTML和CSS

•使用文檔對象模型(Document Object Model)作動態顯示和交互

 •使用XML和XSLT做數據交互和操作

 •使用XMLHttpRequest進行異步數據接收

利用AJAX可以做:

 •注冊時,輸入用戶名自動檢測用戶是否已經存在。

 •登陸時,提示用戶名密碼錯誤

 •刪除數據行時,將行ID發送到后臺,后臺在數據庫中刪除,數據庫刪除成功后,在頁面DOM中將數據行也刪除。

ajax偽造

 iframe就是我們常用的iframe標簽:iframe>。iframe標簽是框架的一種形式,也比較常用到,iframe一般用來包含別的頁面,例如我們可以在我們自己的網站頁面加載別人網站或者本站其他頁面的內容。iframe標簽的最大作用就是讓頁面變得美觀。iframe標簽的用法有很多,主要區別在于對iframe標簽定義的形式不同,例如定義iframe的長寬高。

因此,iframe標簽具有局部加載內容的特性,所以可以使用其來偽造Ajax請求。

!DOCTYPE html>
html>
  head lang="en">
    meta charset="UTF-8">
    title>偽造AJAX/title>
  /head>
  body>
    div>
      p>請輸入要加載的地址:span id="currentTime">/span>/p>
      p>
        input id="url" type="text" />
        input type="button" value="提交" onclick="LoadPage();">
      /p>
    /div>
    div>
      h3>加載頁面位置:/h3>
      iframe id="iframePosition" style="width: 100%;height: 500px;">/iframe>
    /div>
    script type="text/javascript">
      window.onload= function(){
        var myDate = new Date();
        document.getElementById('currentTime').innerText = myDate.getTime();
      };
      function LoadPage(){
        var targetUrl = document.getElementById('url').value;
        document.getElementById("iframePosition").src = targetUrl;
      }
    /script>
  /body>
/html>

原理是這樣的,設置一個提交按鈕,再設置一個輸入框,當我們輸入一個網址的時候,在當前的頁面加載輸入網址的頁面信息,呈現在iframe框里,這樣就能做到不刷新URL來提交不同的信息。

原生ajax

 Ajax的核心是XMLHttpRequest對象(XHR)。XHR為向服務器發送請求和解析服務器響應提供了接口。能夠以異步方式從服務器獲取新數據。

一、XMLHttpRequest對象

Ajax的核心是XMLHttpRequest對象(XHR)。XHR為向服務器發送請求和解析服務器響應提供了接口。能夠以異步方式從服務器獲取新數據。

XHR的主要方法有: 

1. void open(String method,String url,Boolen async)  
 用于創建請求  
  參數:
    method: 請求方式(字符串類型),如:POST、GET、DELETE...
    url:  要請求的地址(字符串類型)
    async: 是否異步(布爾類型)
2. void send(String body)
  用于發送請求
  參數:
    body: 要發送的數據(字符串類型)
3. void setRequestHeader(String header,String value)
  用于設置請求頭
  參數:
    header: 請求頭的key(字符串類型)
    vlaue: 請求頭的value(字符串類型)
4. String getAllResponseHeaders()
  獲取所有響應頭
  返回值:
    響應頭數據(字符串類型)
5. String getResponseHeader(String header)
  獲取響應頭中指定header的值
  參數:
    header: 響應頭的key(字符串類型)
  返回值:
    響應頭中指定的header對應的值
6. void abort() 

終止請求

XHR的主要屬性有:

1. Number readyState
  狀態值(整數),可以確定請求/響應過程的當前活動階段 •0:未初始化。未調用open()方法
 •1:啟動。已經調用open()方法,未調用send()方法
 •2:發送。已經調用send()方法,未接收到響應
 •3:接收。已經接收到部分數據
 •4:完成。已經接收到全部數據,可以在客戶端使用
 2. Function onreadystatechange        
 當readyState的值改變時自動觸發執行其對應的函數(回調函數) 
 3. String responseText            
 作為響應主體被返回的文本(字符串類型)
 4. XmlDocument responseXML          
 服務器返回的數據(Xml對象) 
 5. Number states  
 狀態碼(整數),如:200、404... 6. String statesText             
 狀態文本(字符串),如:OK、NotFound...

 二、get請求

GET用于向服務器查詢某些信息:

!DOCTYPE html>
html>
head lang="en">
  meta charset="UTF-8">
  title>/title>
/head>
body>
  h1>XMLHttpRequest - Ajax請求/h1>
  input type="button" onclick="XmlGetRequest();" value="Get發送請求" />
  script src="/statics/jquery-1.12.4.js">/script>
  script type="text/javascript">
    function GetXHR(){
      var xhr = null;
      if(XMLHttpRequest){
        xhr = new XMLHttpRequest();
      }else{
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      }
      return xhr;
    }
    function XmlGetRequest(){
      var xhr = GetXHR();
      // 定義回調函數
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
          // 已經接收到全部響應數據,執行以下操作
          var data = xhr.responseText;
          console.log(data);
        }
      };
      // 指定連接方式和地址----文件方式
      xhr.open('get', "/test/", true);
      // 發送請求
      xhr.send();
    }
  /script>
/body>
/html>

三、post請求

POST請求用于向服務器發送應該被保存的數據。POST請求的主體可以包含非常多的數據,而且格式不限。

!DOCTYPE html>
html>
head lang="en">
  meta charset="UTF-8">
  title>POST/title>
/head>
body>
  h1>XMLHttpRequest - Ajax請求/h1>
  input type="button" onclick="XmlPostRequest();" value="Post發送請求" />
  script src="/statics/jquery-1.12.4.js">/script>
  script type="text/javascript">
    function GetXHR(){
      var xhr = null;
      if(XMLHttpRequest){
        xhr = new XMLHttpRequest();
      }else{
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      }
      return xhr;
    }
    function XmlPostRequest(){
      var xhr = GetXHR();
      // 定義回調函數
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
          // 已經接收到全部響應數據,執行以下操作
          var data = xhr.responseText;
          console.log(data);
        }
      };
      // 指定連接方式和地址----文件方式
      xhr.open('POST', "/test/", true);
      // 設置請求頭
      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
      // 發送請求
      xhr.send('n1=1;n2=2;');
    }
  /script>
/body>
/html>

jquery ajax

jQuery 提供多個與 AJAX 有關的方法。

通過 jQuery AJAX 方法,您能夠使用 HTTP Get 和 HTTP Post 從遠程服務器上請求文本、HTML、XML 或 JSON - 同時您能夠把這些外部數據直接載入網頁的被選元素中。

 •jQuery 不是生產者,而是大自然搬運工。

 •jQuery Ajax本質 XMLHttpRequest 或 ActiveXObject 

注:2.+版本不再支持IE9以下的瀏覽器

1. jQuery.get(...)
    所有參數:
       url: 待載入頁面的URL地址
       data: 待發送 Key/value 參數。
     success: 載入成功時回調函數。
     dataType: 返回內容格式,xml, json, script, text, html
2.jQuery.post(...)
    所有參數:
       url: 待載入頁面的URL地址
       data: 待發送 Key/value 參數
     success: 載入成功時回調函數
     dataType: 返回內容格式,xml, json, script, text, html
3.jQuery.getJSON(...)
    所有參數:
       url: 待載入頁面的URL地址
       data: 待發送 Key/value 參數。
     success: 載入成功時回調函數。
4.jQuery.getScript(...)
    所有參數:
       url: 待載入頁面的URL地址
       data: 待發送 Key/value 參數。
     success: 載入成功時回調函數。
5.jQuery.ajax(...)
    部分參數:
       url:請求地址
       type:請求方式,GET、POST(1.9.0之后用method)
     headers:請求頭
       data:要發送的數據
   contentType:即將發送信息至服務器的內容編碼類型(默認: "application/x-www-form-urlencoded; charset=UTF-8")
      async:是否異步
     timeout:設置請求超時時間(毫秒)
    beforeSend:發送請求前執行的函數(全局)
     complete:完成之后執行的回調函數(全局)
     success:成功之后執行的回調函數(全局)
      error:失敗之后執行的回調函數(全局)
     accepts:通過請求頭發送給服務器,告訴服務器當前客戶端課接受的數據類型
     dataType:將服務器端返回的數據轉換成指定類型
      "xml": 將服務器端返回的內容轉換成xml格式
      "text": 將服務器端返回的內容轉換成普通文本格式
      "html": 將服務器端返回的內容轉換成普通文本格式,在插入DOM中時,如果包含JavaScript標簽,則會嘗試去執行。
     "script": 嘗試將返回值當作JavaScript去執行,然后再將服務器端返回的內容轉換成普通文本格式
      "json": 將服務器端返回的內容轉換成相應的JavaScript對象
     "jsonp": JSONP 格式使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數名,以執行回調函數

寫一個最簡單的例子:

!DOCTYPE html>
html>
head lang="en">
  meta charset="UTF-8">
  title>/title>
/head>
body>
  p>
    input type="button" onclick="XmlSendRequest();" value='Ajax請求' />
  /p>
  script type="text/javascript" src="jquery-1.12.4.js">/script>
  script>
    function JXmlSendRequest(){
      $.ajax({
        url: "http://c2.com:8000/test/",  // 訪問url地址
        type: 'GET',            // get方式提交
        dataType: 'text',           // 數據類型
        success: function(data, statusText, xmlHttpRequest){ // 成功后返回的結果
          console.log(data);
        }
      })
    }
  /script>
/body>
/html>

跨域ajax

由于瀏覽器存在同源策略機制,同源策略阻止從一個源加載的文檔或腳本獲取或設置另一個源加載的文檔的屬性。所以ajax本身是不可以跨域的,通過產生一個script標簽來實現跨域。因為script標簽的src屬性是沒有跨域的限制的。

瀏覽器同源策略并不是對所有的請求均制約:

 •制約: XmlHttpRequest

 •不制約: img、iframe、script等具有src屬性的標簽

注:自己模擬跨域,需要現在自己電腦的host文件里面添加兩條域名,我這里添加的是zhangyanlin.com和aylin.com這兩個域名

一、JSONP實現跨域請求

JSONP是一個非官方的協議,它允許在服務器端集成Script tags返回至客戶端,通過javascript callback的形式實現跨域訪問。jsonp只能通過get方式進行跨域請求

!DOCTYPE html>
html lang="en">
head>
  meta charset="UTF-8">
  title>Title/title>
/head>
body>
  input type="button" value="Ajax" onclick="DoAjax();"/>
  input type="button" value="JsonpAjax" onclick="JsonpAjax();"/>
  script src="/statics/jquery-1.12.4.js">/script>
  script src="http://aylin.com:8002/statics/jquery.cookie.js">/script>
  script>
    function func(arg) {
      console.log(arg); // 輸出結果就是python代碼給傳過來的列表[11,22,33,]
    }
    function DoAjax() {
      $.ajax({
        url: 'http://alex.com:8002/index',
        type: 'POST',
        data: {'k1': 'v1'},
        success: function (arg) {
          console.log(arg);
        }        
      });
    }
    function JsonpAjax() {
//      var tag = document.createElement('script');
//      tag.src = "http://alex.com:8002/index";
//      document.head.appendChild(tag);
//      document.head.removeChild(tag);
      $.ajax({
        url: "http://aylin.com:8002/index",
        dataType: 'jsonp',
        jsonpCallBack: 'func'  // 對端給返回函數名,函數接收的參數是內容
      })
    }
  /script>
/body>
/html>

aylin.com域名這邊可以給定義函數

# 采用pythontornado框架來進行的
class IndexHandler(tornado.web.RequestHandler):
  def get(self):
    self.write('func([11,22,33]);')
  def post(self, *args, **kwargs):
    self.write('t2.post')

在這里jsonp就采用script標簽的src來進行跨域請求的

二、CORS

上面那種方法說到瀏覽器的同源策略導致ajax無法進行跨域傳輸,那么這種方法就可以突破瀏覽器限制來進行傳輸。當數據發送給對方域名的時候,對方已經收到,但是在返回的時候被瀏覽器給阻擋,我們可以寫一串類似于身份證的字符串,通過瀏覽器的預檢,從而達到數據的傳輸。

這方面分為簡單請求和非簡單請求

條件:
  1、請求方式:HEAD、GET、POST
  2、請求頭信息:
    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type 對應的值是以下三個中的任意一個
                application/x-www-form-urlencoded
                multipart/form-data
                text/plain
注意:同時滿足以上兩個條件時,則是簡單請求,否則為復雜請求

簡單請求只一次請求,而復雜請求是兩次請求,在發送數據之前會先發一次請求用于做“預檢”,只有“預檢”通過后才再發送一次請求用于數據傳輸。

基于cors實現AJAX請求:

1、支持跨域,簡單請求

服務器設置響應頭:Access-Control-Allow-Origin = '域名' 或 '*'

!DOCTYPE html>
html>
head lang="en">
  meta charset="UTF-8">
  title>/title>
/head>
body>
  p>
    input type="submit" onclick="XmlSendRequest();" />
  /p>
  p>
    input type="submit" onclick="JqSendRequest();" />
  /p>
  script type="text/javascript" src="jquery-1.12.4.js">/script>
  script>
    function XmlSendRequest(){
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4) {
          var result = xhr.responseText;
          console.log(result);
        }
      };
      xhr.open('GET', "http://c2.com:8000/test/", true);
      xhr.send();
    }
    function JqSendRequest(){
      $.ajax({
        url: "http://c2.com:8000/test/",
        type: 'GET',
        dataType: 'text',
        success: function(data, statusText, xmlHttpRequest){
          console.log(data);
        }
      })
    }
  /script>
/body>
/html>
class MainHandler(tornado.web.RequestHandler):
  def get(self):
    self.set_header('Access-Control-Allow-Origin', "http://www.xxx.com")
    self.write('{"status": true, "data": "seven"}')

2、支持跨域,復雜請求

由于復雜請求時,首先會發送“預檢”請求,如果“預檢”成功,則發送真實數據。

 •“預檢”請求時,允許請求方式則需服務器設置響應頭:Access-Control-Request-Method

 •“預檢”請求時,允許請求頭則需服務器設置響應頭:Access-Control-Request-Headers

 •“預檢”緩存時間,服務器設置響應頭:Access-Control-Max-Age

!DOCTYPE html>
html>
head lang="en">
  meta charset="UTF-8">
  title>/title>
/head>
body>
  p>
    input type="submit" onclick="XmlSendRequest();" />
  /p>
  p>
    input type="submit" onclick="JqSendRequest();" />
  /p>
  script type="text/javascript" src="jquery-1.12.4.js">/script>
  script>
    function XmlSendRequest(){
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4) {
          var result = xhr.responseText;
          console.log(result);
        }
      };
      xhr.open('PUT', "http://aylin.com:8000/test/", true);
      xhr.setRequestHeader('k1', 'v1');
      xhr.send();
    }
    function JqSendRequest(){
      $.ajax({
        url: "http://aylin.com:8000/test/",
        type: 'PUT',
        dataType: 'text',
        headers: {'k1': 'v1'},
        success: function(data, statusText, xmlHttpRequest){
          console.log(data);
        }
      })
    }
  /script>
/body>
/html>
class MainHandler(tornado.web.RequestHandler):
  def put(self):
    self.set_header('Access-Control-Allow-Origin', "http://www.xxx.com")
    self.write('{"status": true, "data": "seven"}')
  def options(self, *args, **kwargs):
    self.set_header('Access-Control-Allow-Origin', "http://www.xxx.com")
    self.set_header('Access-Control-Allow-Headers', "k1,k2")
    self.set_header('Access-Control-Allow-Methods', "PUT,DELETE")
    self.set_header('Access-Control-Max-Age', 10)

3、跨域傳輸cookie

在跨域請求中,默認情況下,HTTP Authentication信息,Cookie頭以及用戶的SSL證書無論在預檢請求中或是在實際請求都是不會被發送。

如果想要發送:

 •瀏覽器端:XMLHttpRequest的withCredentials為true

 •服務器端:Access-Control-Allow-Credentials為true

 •注意:服務器端響應的 Access-Control-Allow-Origin 不能是通配符 *

!DOCTYPE html>
html>
head lang="en">
  meta charset="UTF-8">
  title>/title>
/head>
body>
  p>
    input type="submit" onclick="XmlSendRequest();" />
  /p>
  p>
    input type="submit" onclick="JqSendRequest();" />
  /p>
  script type="text/javascript" src="jquery-1.12.4.js">/script>
  script>
    function XmlSendRequest(){
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4) {
          var result = xhr.responseText;
          console.log(result);
        }
      };
      xhr.withCredentials = true;
      xhr.open('PUT', "http://aylin.com:8000/test/", true);
      xhr.setRequestHeader('k1', 'v1');
      xhr.send();
    }
    function JqSendRequest(){
      $.ajax({
        url: "http://aylin.com:8000/test/",
        type: 'PUT',
        dataType: 'text',
        headers: {'k1': 'v1'},
        xhrFields:{withCredentials: true},
        success: function(data, statusText, xmlHttpRequest){
          console.log(data);
        }
      })
    }
  /script>
/body>
/html>
class MainHandler(tornado.web.RequestHandler):
  def put(self):
    self.set_header('Access-Control-Allow-Origin', "http://www.xxx.com")
    self.set_header('Access-Control-Allow-Credentials', "true")
    self.set_header('xxoo', "seven")
    self.set_header('zhangyanlinhenshuai', "feichangshuai")
    self.set_header('Access-Control-Expose-Headers', "shuai,shuaishuai")
    self.set_cookie('kkkkk', 'vvvvv');
    self.write('{"status": true, "data": "seven"}')
  def options(self, *args, **kwargs):
    self.set_header('Access-Control-Allow-Origin', "http://www.xxx.com")
    self.set_header('Access-Control-Allow-Headers', "k1,k2")
    self.set_header('Access-Control-Allow-Methods', "PUT,DELETE")
    self.set_header('Access-Control-Max-Age', 10)

以上所述是小編給大家介紹的Ajax學習全套(最全最經典)的全部敘述,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • IE關閉時判斷及AJAX注銷案例學習
  • Ajax與JSON的一些學習總結
  • 那些年,我還在學習Ajax 學習筆記
  • jquery中ajax學習筆記4
  • jquery中ajax學習筆記3
  • 從零開始學習jQuery (六) jquery中的AJAX使用
  • AJax 學習筆記二(onreadystatechange的作用)
  • AJax 學習筆記一(XMLHTTPRequest對象)
  • Jquery Ajax學習實例 向頁面發出請求,返回XML格式數據
  • 揭開AJAX神秘的面紗(AJAX個人學習筆記)

標簽:洛陽 舟山 內蒙古 鄭州 海南 邢臺 林芝 遼源

巨人網絡通訊聲明:本文標題《Ajax學習全套(最全最經典)》,本文關鍵詞  Ajax,學習,全套,最全,最,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ajax學習全套(最全最經典)》相關的同類信息!
  • 本頁收集關于Ajax學習全套(最全最經典)的相關信息資訊供網民參考!
  • 推薦文章