跨域的問題

傳統(tǒng)的JSONP跨域方法

JQ的ajax調(diào)用是最常見的調(diào)用方法之一,在自己寫一些小demo過程中,總是會遇到跨域問題,

一般遇到跨域問題時,就會出現(xiàn)類似錯誤情況:

No 'Access-Control-Allow-Origin' header is present on the requested resource......

在這里把自己搜索過和使用過的跨域方法記錄一下,以備查詢。

1.?通過jsonp跨域

通過jsonp方式跨域,實際上是通過script標簽引入一個js文件,這個js文件載入成功后會執(zhí)行我們在url參數(shù)中指定的函數(shù),并且會把我們需要的json數(shù)據(jù)作為參數(shù)傳入。所以jsonp是需要服務器端的頁面進行相應的配合的。

在JQ中,我們可以通過一個自動的callback函數(shù)完成這一過程:

例如:

var url ='http://v.juhe.cn/weather/index?callback=?';

$.getJSON(url,?{

? 'cityname':'北京',

? 'dtype':'jsonp',

? 'key':'xxxx',

? },function(data){

? ? console.log(data.);

});

實際上,在我們執(zhí)行這段代碼時,等于向服務器發(fā)出了這樣一個請求:

http://v.juhe.cn/weather/index?callback=jsoncallback_randomName

在服務器端,則返回了jsonpcallback_randomName(data)的對象:


<?php

header('Content-Type:text/html;Charset=utf-8');

$data=array(

dosomething

);

echo$_GET['jsoncallback_randomName'] ."(".json_encode($data).")";

這種方式還可以寫成$.ajax()和$.get()兩種方式:

var url ='http://v.juhe.cn/weather/index?callback=?';

$.get(url,?{

'cityname':'澳門',

'dtype':'jsonp',

'key':'xxxx',

},function(data){

console.log(data);

},'json');

或者:

var url ='http://v.juhe.cn/weather/index';

$.ajax(url,?{

data:?{

'cityname':'襄陽',

'dtype':'jsonp',

'key':'xxxx',

},

dataType:'jsonp',

jsonp:"jsoncallback",

success: function(data)?{console.log(data);}

});

相當于$.ajax()中,jsonp的callback名稱是手動指定的(jsoncallback),而$.getJSON()則是自動隨機生成一個callback名稱。

拋開JQ,單純JS的實現(xiàn):

script標簽本身就可以訪問其它域的資源,不受瀏覽器同源策略的限制,可以通過在頁面動態(tài)創(chuàng)建script標簽:

function () { var script = document.createElement("script");

? ? ? ? ? ? ? script.src = "http://v.juhe.cn/weather/index&aspx&.........;? ? ?

? ? ? ? ? ? ? ?var head = document.getElementsByTagName("head")[0];

? ? ? ? ? ? ? head.insertBefore(script, head.firstChild); ? ?

? ? };


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

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

  • 什么是 跨域不同域名之間進行訪問??缬?,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器...
    小草莓蹦蹦跳閱讀 1,190評論 0 1
  • iframe 和 jsonp jsonp的方式其實及類似于 一般情況下的ajax請求是這樣的: 但他是不能跨域的...
    HarryPang閱讀 537評論 0 0
  • ajax,跨域是有限制的,現(xiàn)在H5中對ajax內(nèi)置對象進行了重新的改寫升級,也就是說在最新的一些瀏覽器當中,甚至包...
    谷子多閱讀 128評論 0 0
  • cors跨域的問題經(jīng)常會困擾著開發(fā)人員,nodejs做服務端也是如此。 解決方法有2種: 1、代碼控制 2、借助c...
    張曉剛_云字節(jié)閱讀 13,791評論 0 4
  • 女人如水,水利萬物而不爭,既能熱情而沸,又能冷漠成冰。 ???
    芮曦閱讀 190評論 0 0

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