麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

輕松搞定jQuery+JSONP跨域請求的解決方案

2019-11-19 14:13:55
字體:
來源:轉載
供稿:網友

  JSONP(JSON with Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數據訪問的問題。由于同源策略,一般來說位于 server1.example.com 的網頁無法與不是 server1.example.com的服務器溝通,而 HTML 的<script> 元素是一個例外。利用 <script> 元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 資料,而這種使用模式就是所謂的 JSONP。用 JSONP 抓到的資料并不是 JSON,而是任意的JavaScript,用 JavaScript 直譯器執行而不是用 JSON 解析器解析。

  上面一段話來自百度百科,概念永遠是那么抽象難懂,看例子才是最直觀的表現。例子看的多了,領悟到那個點了,自然自己也會學著抽象的描述了。這就是為什么常說“學習知識是從薄到厚,又由厚到薄的過程”。好了扯遠了。下面直接來看一個例子。

 

  問題:本地現有一個頁面demo.html需要從http://localhost:3561/User/GetAllNames獲取數據并展示。

  解答:由于問題中的兩方不在同一服務器,故需要使用jsonp來跨域訪問。

  ① 客戶端編寫

  客戶端使用jQuery中提供的$.getJson方法來跨域訪問。getJson有3個參數:

    I.   url:請求地址;

    II.  data:發送到服務端的參數;

    III. callback:成功時的回調函數。

  getJson的使用方法和普通的$.get方法基本一致,不同的地方在于getJson需要在url后面的參數部分加上callback=?這一固定部分,jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。然后在回調函數中操作從異域返回的json對象,回調函數callback的參數即為該json對象。

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  <title></title></head><body>  <ul id="nameList"></ul>  <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>  <script type="text/javascript">    $.getJSON("http://localhost:3561/User/GetAllNames?callback=?", function(json) {      for (var i = 0; i < json.length; i++) {        $("#nameList").append("<li>" + json[i] + "</li>");      }    });  </script></body></html>
  ② 服務端編寫

  服務端的邏輯主要是將數據序列化為json字符串,然后封裝成"callback(json)"的形式,callback為jQuery自動生成并傳到服務端的函數名稱。下面使用C#實現:

public class UserController : Controller{    public string GetAllNames(string callback)  {    string[] names = new string[] { "張三豐", "張無忌", "令狐沖", "楊過", "郭靖" };    JavaScriptSerializer jss = new JavaScriptSerializer();    string json = jss.Serialize(names);    return string.Format("{0}({1})", callback, json);  }}
  至此,便成功解決了問題。

 思考:如果服務端已經寫死了callback(如:return string.Format("moty({0})", json);),那么客戶端該怎么寫呢?

 參考:

$.ajax("http://localhost:3561/User/GetAllNames", {  jsonpCallback: "moty",  dataType: "jsonp",  success: function(json) {    for (var i = 0; i < json.length; i++) {      $("#nameList").append("<li>" + json[i] + "</li>");    }  }});
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久国语对白 | 国产精品久久久乱弄 | av最新在线观看 | aa级黄色片 | av在线免费不卡 | 极品国产91在线网站 | 国产精品久久久久网站 | 福利在线小视频 | 中文字幕在线日韩 | 多男操一女视频 | 久啪视频 | 久久91精品国产91久久yfo | 久草在线高清 | 污污的视频在线观看 | 福利在线小视频 | 小情侣嗯啊哦视频www | 一日本道久久久精品国产 | 黄色片网站在线免费观看 | 电影av在线| 国产91精品亚洲精品日韩已满 | 亚洲va久久久噜噜噜久牛牛影视 | 久久欧美亚洲另类专区91大神 | 欧美毛片在线观看 | 成人免费乱码大片a毛片视频网站 | 亚洲综合一区二区三区 | 国产三级国产精品国产普男人 | 激情久久精品 | 黄色毛片一级视频 | 国产毛片自拍 | 成人在线观看免费高清 | 欧美不卡视频在线观看 | 精品一区二区6 | v11av在线播放 | 操操操操网 | hdhdhd79xxxxх| 姑娘第四集免费看视频 | 香蕉久草在线 | 国产精品一区在线免费观看 | 国产成年人网站 | 中文字幕在线观看免费 | 日韩精品99久久久久久 |