jsonp

Jsonp原理:?

首先在客戶端注冊一個callback, 然后把callback的名字傳給服務(wù)器。

此時,服務(wù)器先生成 json 數(shù)據(jù)。

然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數(shù) jsonp.

最后將 json 數(shù)據(jù)直接以入?yún)⒌姆绞?,放置?function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。

客戶端瀏覽器,解析script標(biāo)簽,并執(zhí)行返回的 javascript 文檔,此時數(shù)據(jù)作為參數(shù),傳入到了客戶端預(yù)先定義好的 callback 函數(shù)里.(動態(tài)執(zhí)行回調(diào)函數(shù))

而目前實現(xiàn)jsonp跨域方法最簡便是使用jq封裝的.

一句話:主要是利用了script標(biāo)簽可以跨域鏈接資源的特性,缺點是:jsonp只能解決get方式的跨域.





<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>jsonp公開接口</title>

<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>

<script type="text/javascript">

//360搜索的公開接口

//https://sug.so.#/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word&word=s

$(function(){

$('#txt01').keyup(function() {

var val = $(this).val();

$.ajax({

url: 'https://sug.so.#/suggest?encodein=utf-8&encodeout=utf-8&format=json&fields=word',//請求360搜索的公開接口

type: 'get',

dataType: 'jsonp',//跨域請求

data: {word: val},//攜帶參數(shù)

jsonpCallback:'suggest_so'//指定360提供的jsonp的回調(diào)函數(shù)

})

.done(function(data) {

console.log(data);

// alert(data.result.length);//10條數(shù)據(jù)

$('.list').empty();//先清空列表

//模擬搜索聯(lián)想,循環(huán)插入新列表

for(var i=0; i<data.result.length; i++){

var $li = $('<li>'+data.result[i].word+'</li>');

$li.appendTo('.list');

}

})

/*.fail(function(XMLHttpRequest, textStatus, errorThrown) {//失敗

console.log("error");

// 狀態(tài)碼

? ? ? ? ? ? console.log(XMLHttpRequest.status);

? ? ? ? ? ? // 狀態(tài)

? ? ? ? ? ? console.log(XMLHttpRequest.readyState);

? ? ? ? ? ? // 錯誤信息?

? ? ? ? ? ? console.log(textStatus);

});*/

.fail(function(jqXHR, textStatus, errorThrown) {//失敗

console.log("error");

/*彈出jqXHR對象的信息*/

? ? ? ? ? ? console.log(jqXHR.responseText);

? ? ? ? ? ? console.log(jqXHR.status);

? ? ? ? ? ? console.log(jqXHR.readyState);

? ? ? ? ? ? console.log(jqXHR.statusText);

? ? ? ? ? ? /*彈出其他兩個參數(shù)的信息*/

? ? ? ? ? ? console.log(textStatus);

? ? ? ? ? ? console.log(errorThrown);

});

});

})

</script>

</head>

<body>

<input type="text" id="txt01">

<ul class="list"></ul>

</body>

</html>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容