ajax與jsonp比較:

1、ajax和jsonp這兩種技術(shù)在調(diào)用方式上“看起來(lái)”很像,目的也一樣,都是請(qǐng)求一個(gè)url,然后把服務(wù)器返回的數(shù)據(jù)進(jìn)行處理,因此jquery和ext等框架都把jsonp作為ajax的一種形式進(jìn)行了封裝;

2、但ajax和jsonp其實(shí)本質(zhì)上是不同的東西。ajax的核心是通過(guò)XmlHttpRequest獲取非本頁(yè)內(nèi)容,而jsonp的核心則是動(dòng)態(tài)添加標(biāo)簽來(lái)調(diào)用服務(wù)器提供的js腳本。

3、所以說(shuō),其實(shí)ajax與jsonp的區(qū)別不在于是否跨域,ajax通過(guò)服務(wù)端代理一樣可以實(shí)現(xiàn)跨域,jsonp本身也不排斥同域的數(shù)據(jù)的獲取。

4、還有就是,jsonp是一種方式或者說(shuō)非強(qiáng)制性協(xié)議,如同ajax一樣,它也不一定非要用json格式來(lái)傳遞數(shù)據(jù),如果你愿意,字符串都行,只不過(guò)這樣不利于用jsonp提供公開(kāi)服務(wù)。

總而言之,jsonp不是ajax的一個(gè)特例,哪怕jquery等巨頭把jsonp封裝進(jìn)了ajax,也不能改變著一點(diǎn)!

———————————————————————————————————————————

看了很多網(wǎng)上的資料,拿出通俗易懂的話講解跨域問(wèn)題,以及ajax,jsonp,json的區(qū)別。

【1】ajax和jsonp本質(zhì)上是不同的東西。Ajax是異步的js他的核心是通過(guò)XmlHttpRequest獲取非本頁(yè)內(nèi)容,而jsonp的核心則是動(dòng)態(tài)添加標(biāo)簽來(lái)調(diào)用服務(wù)器提供的js腳本。

【2】ajax和jsonp這兩種技術(shù)很像,目的也一樣,都是請(qǐng)求一個(gè)url,然后把服務(wù)器返回的數(shù)據(jù)進(jìn)行處理,因此jquery類(lèi)庫(kù)把jsonp作為ajax的一種形式進(jìn)行了封裝(其實(shí)并不是一種東西)怪jq嘮?用著爽就好;

【3】出于安全考慮,腳本(AJAX)不能訪問(wèn)非本域的內(nèi)容。但是,靜態(tài)資源是不受域策略限制的,可以加載任意域的腳本、樣式、圖片等靜態(tài)資源,JSOP就是利用這種原理來(lái)實(shí)現(xiàn)跨域獲取數(shù)據(jù)的。

先介紹jsonp的使用方法:

好人做到底源碼給你嘮

$(function(){

$.ajax({

type: "get",

url: "http://apis.juhe.cn/cook/query.php?menu=魚(yú)香肉絲&key=dfed9d599318b17aa073a9337d057e5f",

dataType: "jsonp"

}).done(function (data) {

console.log(data)

})

});

服務(wù)器運(yùn)行的結(jié)果完美跨域獲取到數(shù)據(jù)

再介紹PHP配合ajax跨域:

先建立叫search.php的文件!

內(nèi)容為:

$data =$_POST['data'];

//服務(wù)器來(lái)接收客戶端發(fā)送的數(shù)據(jù)

//服務(wù)器允許 該請(qǐng)求頭進(jìn)行跨域

header("Access-Control-Allow-Origin:http://apis.juhe.cn/cook/query.php?".$data."&key=dfed9d599318b17aa073a9337d057e5f");

// 服務(wù)器獲取數(shù)據(jù)的方式

header('Access-Control-Allow-Methods:GET');

// 動(dòng)態(tài)獲取數(shù)據(jù)地址

$ulr ="http://apis.juhe.cn/cook/query.php?".$data."&key=dfed9d599318b17aa073a9337d057e5f";

// 服務(wù)器講獲取的數(shù)據(jù)轉(zhuǎn)換成JSON格式 返回給客戶端

$html=file_get_contents($ulr);

// 返回客戶端 echo 返回一個(gè)字符串

echo $html;//服務(wù)器來(lái)返回一個(gè) string的 數(shù)據(jù)

?>

Index.html的內(nèi)容為:

運(yùn)行結(jié)果:

最后再說(shuō)一下json和jsonp的區(qū)別json是一種數(shù)據(jù)格式而jsonp是一種跨域的方式根本不是一回事只是名字差不多!

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

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

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