JQUERY-自定義插件-ajax-跨域訪問

正課:php

1. ***自定義插件:css

2. Ajaxhtml

3. *****跨域訪問:ajax

 

1. ***自定義插件:json

 前提: 已經html,css,js實現跨域

 2風格:服務器

  1. jQueryUI侵入式:app

    1. css應提取到獨立css文件中函數

      強調: 全部插件內的子元素選擇器都要以插件父元素class開頭,避免與其餘插件衝突。post

    2. 定義獨立的js文件:

     1. 判斷是否引入jQuery

     2. jQuery原型對象中添加插件函數

       1. 侵入class和自定義擴展屬性

       2. 綁定事件

    3. 使用插件:

      引入插件.css,

      按插件要求編寫HTML內容

      引入jQuery

      引入插件.js

      編寫自定義腳本: 查找插件父元素,調用插件API

  2. Bootstrap DIV:

    1. css應提取到獨立css文件中: jQueryUI方式

    2. 定義獨立的js文件:

      強調: 不須要添加函數,不用侵入

    3. 使用插件:

      引入插件.css

      按插件要求編寫HTML內容

      HTML元素,手動添加class自定義擴展屬性

      引入jQuery

      引入插件.js

      強調: 不須要調用任何插件函數

 

2. Ajax:

 $.ajax({

  type:"get/post",

  url:"xxx.php",

  data: 查詢字符串/{ 參數:, 參數:, ...}/$form.serialize(),

  dataType:"json"//若是返回json,則自動轉爲對象,

  success:function(data){ //請求響應結束且成功

  },

  error:function(){ //請求響應結束,但出錯

  },

  complete:function(){ //只要請求響應結束

  }

 })//3.x

  .then(function(data){ ... })

 dataType: 若是服務端定義了響應的內容類型爲applicaton/json, 則$.ajax自動轉換沒必要dataType

 $.get("url", data, function(data){...}, dataType)

  $(parent).load("url",function(){ ... }) 返回內容,填充到parent

  $.getJSON()

  $.getScript()

 $.post()

 

3. *****跨域請求:

 什麼是跨域:

  1. 域名不一樣, 2. 二級域名不一樣, 3. 端口號不一樣, 4. 協議

 問題: 服務端不容許xhr對象跨域發送ajax請求

 解決: 利用能夠跨域的元素(link, script, iframe, img, ... )

  1.script變通實現跨域請求:

   JSONP: JSON with padding 填充json

   方案1:

     服務端: 將返回的數據,填充在一條js語句中返回

     客戶端: script src="http://xxx/xx.php"

    問題: 客戶端數據的處理邏輯在服務端寫死的衆口難調

   方案2:

     服務端: 返回一條函數調用的js語句,將數據做爲參數

     客戶端: 提早定義和服務端同名js函數

    問題: 函數名是在服務器端定死的

   方案3: 

     服務端: 接受客戶端傳入的函授名參數(callback)

            返回結果中動態拼接函數名

     客戶端: script src="xxx.php?callback=函數"

    問題: script寫死的,只能在頁面加載時發送一次請求

   方案4:

     客戶端: 不要寫死script

         處理函數中,動態建立script,發送請求

         處理函數結尾,刪除動態建立的script

    問題: 和傳統ajax不一致!

   方案5:

    $.ajax({

      type:"",

      url:"",

      data:...,

      dataType:"jsonp",

      success:function(){

        

      }

    })

  2. 經過服務器端開放跨域:

   php: header('Access-Control-Allow-Origin:http://請求來自的網址');

 

 

正課:

1. ***自定義插件:

2. Ajax

3. *****跨域訪問:

 

1. ***自定義插件:

 前提: 已經html,css,js實現

 2風格:

  1. jQueryUI侵入式:

    1. css應提取到獨立css文件中

      強調: 全部插件內的子元素選擇器都要以插件父元素class開頭,避免與其餘插件衝突。

    2. 定義獨立的js文件:

     1. 判斷是否引入jQuery

     2. jQuery原型對象中添加插件函數

       1. 侵入class和自定義擴展屬性

       2. 綁定事件

    3. 使用插件:

      引入插件.css,

      按插件要求編寫HTML內容

      引入jQuery

      引入插件.js

      編寫自定義腳本: 查找插件父元素,調用插件API

  2. Bootstrap DIV:

    1. css應提取到獨立css文件中: jQueryUI方式

    2. 定義獨立的js文件:

      強調: 不須要添加函數,不用侵入

    3. 使用插件:

      引入插件.css

      按插件要求編寫HTML內容

      HTML元素,手動添加class自定義擴展屬性

      引入jQuery

      引入插件.js

      強調: 不須要調用任何插件函數

 

2. Ajax:

 $.ajax({

  type:"get/post",

  url:"xxx.php",

  data: 查詢字符串/{ 參數:, 參數:, ...}/$form.serialize(),

  dataType:"json"//若是返回json,則自動轉爲對象,

  success:function(data){ //請求響應結束且成功

  },

  error:function(){ //請求響應結束,但出錯

  },

  complete:function(){ //只要請求響應結束

  }

 })//3.x

  .then(function(data){ ... })

 dataType: 若是服務端定義了響應的內容類型爲applicaton/json, 則$.ajax自動轉換沒必要dataType

 $.get("url", data, function(data){...}, dataType)

  $(parent).load("url",function(){ ... }) 返回內容,填充到parent

  $.getJSON()

  $.getScript()

 $.post()

 

3. *****跨域請求:

 什麼是跨域:

  1. 域名不一樣, 2. 二級域名不一樣, 3. 端口號不一樣, 4. 協議

 問題: 服務端不容許xhr對象跨域發送ajax請求

 解決: 利用能夠跨域的元素(link, script, iframe, img, ... )

  1.script變通實現跨域請求:

   JSONP: JSON with padding 填充json

   方案1:

     服務端: 將返回的數據,填充在一條js語句中返回

     客戶端: script src="http://xxx/xx.php"

    問題: 客戶端數據的處理邏輯在服務端寫死的衆口難調

   方案2:

     服務端: 返回一條函數調用的js語句,將數據做爲參數

     客戶端: 提早定義和服務端同名js函數

    問題: 函數名是在服務器端定死的

   方案3: 

     服務端: 接受客戶端傳入的函授名參數(callback)

            返回結果中動態拼接函數名

     客戶端: script src="xxx.php?callback=函數"

    問題: script寫死的,只能在頁面加載時發送一次請求

   方案4:

     客戶端: 不要寫死script

         處理函數中,動態建立script,發送請求

         處理函數結尾,刪除動態建立的script

    問題: 和傳統ajax不一致!

   方案5:

    $.ajax({

      type:"",

      url:"",

      data:...,

      dataType:"jsonp",

      success:function(){

        

      }

    })

  2. 經過服務器端開放跨域:

   php: header('Access-Control-Allow-Origin:http://請求來自的網址');

相關文章
相關標籤/搜索