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

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

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

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

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

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

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

//根據(jù)指定的url發(fā)送一個json請求
//然后把解析得到的響應(yīng)數(shù)據(jù)傳遞給回調(diào)函數(shù)
//在url中添加一個名為jsonp的查詢參數(shù), 用于指定該請求的回調(diào)函數(shù)的名稱
function getJSONP(url, callback){
//為本次請求創(chuàng)建一個唯一的回調(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ā)送請求
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請求
script.src = url;
document.body.appendChild(script);
}
getJSONP.counter = 0;

相關(guān)文章

最新評論

陕西省| 土默特右旗| 青海省| 桂阳县| 岳西县| 庆安县| 吉安县| 信阳市| 安国市| 罗江县| 齐齐哈尔市| 大渡口区| 平武县| 青田县| 延川县| 陆丰市| 黑水县| 栖霞市| 行唐县| 潮安县| 延庆县| 沿河| 天水市| 桃源县| 星座| 南安市| 中西区| 阿拉善盟| 广南县| 永安市| 灵武市| 和平区| 胶南市| 昌黎县| 曲沃县| 克东县| 社旗县| 遂溪县| 龙里县| 英吉沙县| 涞源县|