最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

借助script進(jìn)行Http跨域請(qǐng)求:JSONP實(shí)現(xiàn)原理及代碼

 更新時(shí)間:2013年03月19日 14:51:09   作者:  
script元素的src屬性能設(shè)置URL并發(fā)起HTTP GET請(qǐng)求實(shí)現(xiàn)腳本操作HTTP可以跨域通信而不受限與同源策略,接下來為大家詳細(xì)介紹下Http跨域請(qǐng)求實(shí)現(xiàn),感興趣的你可以參考下哈
<script>元素的src屬性能設(shè)置URL并發(fā)起HTTP GET請(qǐng)求, 使用<script>元素實(shí)現(xiàn)腳本操作HTTP可以跨域通信而不受限與同源策略. 通常, 使用基于<script>的Ajax傳輸協(xié)議時(shí), 服務(wù)器響應(yīng)采用JSON編碼的數(shù)據(jù)格式, 當(dāng)執(zhí)行腳本時(shí)候, JavaScript解析器能夠自動(dòng)將其解碼. 由于它使用JSON數(shù)據(jù)格式, 因此這種Ajax傳輸協(xié)議也叫做"JSONP". 所以使用jsonp技術(shù), 只需要設(shè)置<script>的src屬性, 并且插入到document中, 然后瀏覽器就會(huì)發(fā)送一個(gè)http請(qǐng)求以下載src屬性所執(zhí)行的url.

當(dāng)使用<script>元素調(diào)用數(shù)據(jù)時(shí), 響應(yīng)內(nèi)容必須用JavaScript函數(shù)名和圓括號(hào)包裹起來(也就是只能作為函數(shù)的參數(shù)), 而不是直接的一段json數(shù)據(jù):
復(fù)制代碼 代碼如下:

response(
[1, 2, {"hello", "world"}]
)

為了可行期間, 我們必須通過某種方式告訴服務(wù), 它正在從一個(gè)<script>元素調(diào)用, 必須返回一個(gè)jsonp響應(yīng), 而不是普通的json, 這個(gè)可以通過在url中添加一個(gè)查詢參數(shù)來實(shí)現(xiàn): 例如, 追加"?json"(或者&json)

在實(shí)踐中, 支持jsonp的服務(wù)不會(huì)強(qiáng)制指定客戶端必須實(shí)現(xiàn)的回調(diào)函數(shù)名稱, 比如response. 相反它們使用查詢參數(shù)的值, 允許客戶端指定一個(gè)函數(shù)名,然后使用函數(shù)名去填充響應(yīng).
復(fù)制代碼 代碼如下:

//根據(jù)指定的url發(fā)送一個(gè)json請(qǐng)求
//然后把解析得到的響應(yīng)數(shù)據(jù)傳遞給回調(diào)函數(shù)
//在url中添加一個(gè)名為jsonp的查詢參數(shù), 用于指定該請(qǐng)求的回調(diào)函數(shù)的名稱
function getJSONP(url, callback){
//為本次請(qǐng)求創(chuàng)建一個(gè)唯一的回調(diào)函數(shù)名稱
var cbnum = "cb"+getJSONP.counter++;
var cbname = "getJSONP."+cbnum; //作為jsonp函數(shù)的屬性
//將回調(diào)函數(shù)名稱以表單編碼的形式添加到url查詢部分中
if(url.indexOf("?") === -1){
url += "?jsonp="+cbname;
}else{
url += "&jsonp="+cbname;
}
//創(chuàng)建<script>用于發(fā)送請(qǐng)求
var script = document.createElement("script");
//定義被腳本執(zhí)行的回調(diào)函數(shù)
getJSONP[cbnum] = function(response){
try{
callback(response); //處理響應(yīng)
}
finally{
//刪除該函數(shù), 并移除相應(yīng)script元素
delete getJSONP[cbnum];
script.parentNode.removeChild(script);
}
}
//立即觸發(fā)http請(qǐng)求
script.src = url;
document.body.appendChild(script);
}
getJSONP.counter = 0;

相關(guān)文章

最新評(píng)論

庆元县| 荔波县| 永德县| 陈巴尔虎旗| 枣强县| 会昌县| 雷波县| 永德县| 红河县| 龙胜| 馆陶县| 通化市| 鄂尔多斯市| 郧西县| 南城县| 五河县| 体育| 安新县| 客服| 修文县| 华容县| 遂昌县| 留坝县| 当阳市| 吴江市| 房产| 沂南县| 平谷区| 新邵县| 庄浪县| 伊春市| 兴安县| 新乐市| 双牌县| 连南| 兴城市| 连州市| 湟中县| 灯塔市| 雷波县| 彝良县|