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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

3 回答

?
冉冉說

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

前言:

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


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

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

JSON請(qǐng)求:

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

JSONP請(qǐng)求:

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

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

杰森:

{ "bar": "baz" }

JSONP:

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

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

本函數(shù)必須存在在全球范圍內(nèi)當(dāng)時(shí)這個(gè)<script>標(biāo)記由瀏覽器計(jì)算(一旦請(qǐng)求完成)。


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

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


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

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


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

下面假設(shè)有一個(gè)響應(yīng)對(duì)象{ "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);


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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