AJAX-CORS 跨域


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", "*"); //可以寫成配置,指定域名    

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM