ajax jsonp跨域

weixin_33816946發表於2015-09-14
js跨域問題是指:js不同域進行資料傳輸或通訊之間,讓我們用ajax到不同的域請求資料。或js獲得在不同領域的框架頁(iframe)資料。只有到協議、域名、port無論是有不同的,它們被認為是不同的域。


js跨域參考:http://www.cnblogs.com/2050/p/3191744.html
能夠通過jsonp實現js跨域,可是獲取的資料必須是指令碼檔案。比如json。
以下介紹jquery.ajax方法
jQuery.ajax(url,[settings]);url是必填的。其它都是選填的。
經常使用格式:
$.ajax({
url:url,
type:"get",
dataType: "jsonp",
sucess:function(data){}
});
主要選項介紹:
1)type:請求方式 ("POST" 或 "GET"),默覺得GET。
2)dataType:

預期server返回的資料型別。

假設不指定,jQuery將自己主動依據HTTP包MIME資訊來智慧推斷,比方XML MIME型別就被識別為XML。在1.4中,JSON就會生成一個JavaScript物件。而script則會執行這個指令碼。隨後server端返回的資料會依據這個值解析後。傳遞給回撥函式。可用值: 
"xml": 返回 XML 文件。可用 jQuery 處理。
"html": 返回純文字 HTML 資訊;包括的script標籤會在插入dom時執行。
"script": 返回純文字 JavaScript 程式碼。不會自己主動快取結果。除非設定了"cache"引數。'''注意:'''在遠端請求時(不在同一個域下),全部POST請求都將轉為GET請求。

(由於將使用DOM的script標籤來載入)
"json": 返回 JSON 資料 。


"jsonp": JSONP 格式。使用 JSONP 形式呼叫函式時。如 "myurl?callback=?" jQuery 將自己主動替換 ? 為正確的函式名,以執行回撥函式。


"text": 返回純文字字串
3)async:(預設: true) 預設設定下,全部請求均為非同步請求。
假設須要傳送同步請求,請將此選項設定為false。

同步請求將鎖住瀏覽器。使用者其他操作必須等待請求完畢才幹夠執行。注意:用jsonp實現跨域。僅僅能使用非同步提交,不管你是否設定async。參見:http://api.jquery.com/jQuery.ajax/
原文:Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.
4)data:傳送到server的資料
data選項既能夠包括一個查詢字串,比方 key1=value1&key2=value2 ,也能夠是一個對映。比方 {key1: 'value1', key2: 'value2'} 。假設使用了後者的形式,則資料會被轉換成查詢字串。
5)jsonp:在一個jsonp請求中重寫回撥函式的名字。這個值用來替代在"callback=?"這樣的GET或POST請求中URL引數裡的"callback"部分。比方{jsonp:'onJsonPLoad'}會導致將"onJsonPLoad=?"傳給server。


6)jsonpCallback:為jsonp請求指定一個回撥函式名。這個值將用來代替jQuery自己主動生成的隨機函式名。這主要用來讓jQuery生成度獨特的函式名。這樣管理請求更easy。也能方便地提供回撥函式和錯誤處理。你也能夠在想讓瀏覽器快取GET請求的時候,指定這個回撥函式名。
7)username和password選項
假設server須要HTTP認證,能夠使用username與password能夠通過username和password選項來設定。
8)success(data, textStatus, jqXHR):請求成功後的回撥函式。


9)timeout:設定請求超時時間(毫秒)。此設定將覆蓋全域性設定。


注意。當程式中須要發起多個AJAX請求時,則不用再為每個請求配置請求的引數。全部的選項都能夠通過$.ajaxSetup()函式來全域性設定
舉例:

$.ajaxSetup({
    timeout: 3000,
    dataType: 'html',
    //請求成功後觸發
    success: function (data) { show.append('success invoke!' + data + '<br/>'); },
    //請求失敗遇到異常觸發
    error: function (xhr, status, e) { show.append('error invoke! status:' + status+'<br/>'); },
    //完畢請求後觸發。即在success或error觸發後觸發
    complete: function (xhr, status) { show.append('complete invoke! status:' + status+'<br/>'); },
    //傳送請求前觸發
    beforeSend: function (xhr) {
    //能夠設定自己定義標頭
    xhr.setRequestHeader('Content-Type', 'application/xml;charset=utf-8');
    show.append('beforeSend invoke!' +'<br/>');
    },
  })


版權宣告:本文博主原創文章。部落格,未經同意不得轉載。

相關文章