1、CORS就是一套AJAX跨域問題的解決方案。
2、CORS的原理: CORS定義一種跨域訪問的機制,可以讓AJAX實現跨域訪問。
3、CORS瀏覽器支持情況:
Chrome 3+
Firefox 3.5
Opera 12+
Safari 4+
IE 8+
4、JS-Ajax相關:
ajax({
url : "XXXX", // 請求url
method: options.type, // 請求方式
data: {"data" : "XXXX"}, //參數
success: function () {
//成功
}
});
function ajax(options) {
options = options || {};
options.async = options.async || true;
var params = '';
for (var item in options.data) {
params += (item + '=' + options.data[item] + '&');
}
if(params != ''){
params = params.substring(0,params.length - 1);
}
if (options.method === 'get') {
options.url += options.url.indexOf('?') == -1 ? '?' + params : params;
}
var xhr = createCORSXHR(options.method, options.url); //創建XHR對象
if(xhr === null){
console.log("XMLHttpRequest對象創建失敗");
return;
}
if (options.method === 'post') {
//post方式需要自己設置http的請求頭,來模仿表單提交。
//放在open方法之后,send方法之前。
if ("withCredentials" in xhr) {
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
// 針對IE
xhr.send(params); //post方式將數據放在send()方法里
} else {
xhr.send(); //get方式則填null
}
xhr.onload = function(){
options.success(xhr.responseText);
};
xhr.onerror = function(){
log.debug('ajax請求錯誤!');
};
}
/**
* 創建跨域XMLHttpRequest對象
* @param {String} method HttpMethod
* @param {String} url 鏈接地址
* @return {Object} XMLHttpRequest對象
*/
function createCORSXHR(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// 針對Chrome/Safari/Firefox.
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// 針對IE
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// 不支持CORS
xhr = null;
}
return xhr;
}
5、服務端:
// 跨域,只要在請求的接口加上這行代碼
response.setHeader("Access-Control-Allow-Origin", "*"); //可以寫成配置,指定域名
