第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有人能用外行人的話解釋一下JSONP是什么嗎?

有人能用外行人的話解釋一下JSONP是什么嗎?

紅糖糍粑 2019-06-19 10:18:57
有人能用外行人的話解釋一下JSONP是什么嗎?我知道呀JSONP是JSON用墊子。我理解JSON是什么,以及如何使用它jQuery.getJSON()..不過,我不明白callback在介紹JSONP時。有人能向我解釋一下這是怎么回事嗎?
查看完整描述

3 回答

?
冉冉說

TA貢獻1877條經(jīng)驗 獲得超1個贊

前言:

這個答案已經(jīng)六年多了。雖然JSONP的概念和應用沒有改變(即答案的細節(jié)仍然有效),但您應該盡可能使用CORS(即你的服務(wù)器API支持它,并且瀏覽器支持),作為JSONP有固有的安全風險.


JSONP(軟墊)是一種常用的方法,用于繞過Web瀏覽器中的跨域策略。(不允許向被瀏覽器認為位于不同服務(wù)器上的網(wǎng)頁發(fā)出Ajax請求。)

JSON和JSONP在客戶機和服務(wù)器上的行為不同。JSONP請求不使用XMLHTTPRequest以及相關(guān)的瀏覽器方法。相反<script>標記被創(chuàng)建,其源被設(shè)置為目標URL。然后將這個腳本標記添加到DOM(通常在<head>元素)。

JSON請求:

var xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {
  if (xhr.readyState == 4 && xhr.status == 200) {
    // success
  };};xhr.open("GET", "somewhere.php", true);xhr.send();

JSONP請求:

var tag = document.createElement("script");tag.src = 'somewhere_else.php?callback=foo';document.getElementsByTagName("head")[0].
appendChild(tag);

JSON響應和JSONP響應之間的區(qū)別是JSONP響應對象作為參數(shù)傳遞給回調(diào)函數(shù)。

杰森:

{ "bar": "baz" }

JSONP:

foo( { "bar": "baz" } );

這就是為什么您看到JSONP請求包含callback參數(shù),以便服務(wù)器知道要包裝響應的函數(shù)的名稱。

本函數(shù)必須存在在全球范圍內(nèi)當時這個<script>標記由瀏覽器計算(一旦請求完成)。


處理JSON響應與JSONP響應之間的另一個不同之處在于,任何JSON響應中的解析錯誤都可以通過在try/catch語句中包裝計算responseText的嘗試來捕獲。由于JSONP響應的性質(zhì),響應中的解析錯誤將導致無法捕獲的JavaScript解析錯誤。

這兩種格式都可以通過在啟動請求和清除響應處理程序中的超時之前設(shè)置超時來實現(xiàn)超時錯誤。


使用jQuery發(fā)出JSONP請求的有用之處在于jQuery確實如此。所有的工作作為背景的你。

默認情況下,jQuery要求您包括&callback=?在Ajax請求的URL中。jQuery將采用success函數(shù),指定它的唯一名稱,并在全局范圍中發(fā)布它。然后,它將替換問號。?在……里面&callback=?用它指定的名字。


類似的JSON/JSONP實現(xiàn)

下面假設(shè)有一個響應對象{ "bar" : "baz" }

杰森:

var xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {
  if (xhr.readyState == 4 && xhr.status == 200) {
    document.getElementById("output").innerHTML = eval('(' + this.responseText + ')').bar;
  };};xhr.open("GET", "somewhere.php", true);xhr.send();

JSONP:

function foo(response) {
  document.getElementById("output").innerHTML = response.bar;};var tag = document.createElement("script");tag.src = 'somewhere_else.php?
  callback=foo';document.getElementsByTagName("head")[0].appendChild(tag);


查看完整回答
反對 回復 2019-06-19
  • 3 回答
  • 0 關(guān)注
  • 609 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號