在拉京東城市選擇的基礎數據時候,遇到被服務器拒絕的狀況,也就是ajax跨域問題 javascript
說的直白一點,在咱們作ajax異步的一些功能的時候,必定會或多或少的遇到兩個問題,(一、數據的交換。二、跨域問題) html
JSONP的最基本的原理是:動態添加一個<script>標籤,而script標籤的src屬性是沒有跨域的限制的。這樣說來,這種跨域方式其實與ajax XmlHttpRequest協議無關了。咱們在用其餘關於src的標籤的時候,均可以跨域。因此咱們只要動態構造的src標籤一樣能夠作到跨域。 java
1
2
3
4
5
6
7
|
<script type="text/javascript">
function
jsonpCallback(result)
{
alert(result.msg);
}
</script>
<script type="text/javascript" src="
http://crossdomain.com/jsonServerResponse?jsonp=
jsonpCallback"></script>
|
從紅色的地方能夠看出,兩個名字要一直,不過通常採用callback而後後面加一個「?」此時jquery會自動生成一個函數名,這樣能夠作到發送不少請求的時候,並不會互相影響。 jquery
同源策略 :即JavaScript只能訪問與包含它的文檔在同一域下的內容。 ajax
jsonp能夠跨越同源策略,當咱們使用了jsonp,將會是另一種協議通訊了。 json
JSONP的優勢是:它不像XMLHttpRequest對象實現的Ajax請求那樣受到同源策略的限制;它的兼容性更好,在更加古老的瀏覽器中均可以運行,不須要XMLHttpRequest或ActiveX的支持;而且在請求完畢後能夠經過調用callback的方式回傳結果。 跨域
JSONP的缺點則是:它只支持GET請求而不支持POST等其它類型的HTTP請求;它只支持跨域HTTP請求這種狀況,不能解決不一樣域的兩個頁面之間如何進行JavaScript調用的問題。 瀏覽器
1
2
3
4
5
|
$.ajax({
async:false,
url: http://跨域的dns/document!searchJSONResult.action,
type:"GET",
dataType:'jsonp',
|
一般狀況通常是這兩種使用方法,在跨域問題上,很是簡單。 服務器