1. 程式人生 > >【前端】 傳送http請求 ajax 跨域

【前端】 傳送http請求 ajax 跨域

ajax重定向跨域問題

請求到後端,後端介面重定向到另一個域名地址:跨域問題

ajax:無重新整理,重定向時,ajax獲取重定向狀態值30*和url,再獲取重定向頁面執行完後輸出到客戶端的html程式碼,返回200

    請求後端介面,後端返回302和一個url,ajax據http的code碼再一次發起請求,去請求 伺服器端302返回的url,此時跨域了

    解決:在第一次得到相應處理後js做一次location.href跳轉:讓瀏覽器去請求重定向的介面而不是ajax

瀏覽器:通過返回的http狀態進行相應操作,如訪問一個頁面,頁面重定向時瀏覽器獲取302 標示,將位址列url換成後端返回的url,重定向後的url進行轉向

原生js

獲取XMLHttpRequest物件


function createXMLHttpRequest() {
	var xmlHttp;
	if (window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
		if (xmlHttp.overrideMimeType)
			xmlHttp.overrideMimeType('text/xml');
	} else if (window.ActiveXObject) {
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
			}
		}
	}
	return xmlHttp;
}

get請求:XMLHttpRequest

<script type="text/javascript"> 
/* 建立 XMLHttpRequest 物件 */
var xmlHttp; 
function GetXmlHttpObject(){ 
  if (window.XMLHttpRequest){ 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
  }else{// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
  } 
  return xmlhttp; 
} 
// -----------ajax方法-----------// 
function getLabelsGet(){ 
  xmlHttp=GetXmlHttpObject(); 
  if (xmlHttp==null){ 
    alert('您的瀏覽器不支援AJAX!'); 
    return; 
  } 
  var id = document.getElementById('id').value; 
  var url="http://www.Leefrom.com?id="+id+"&t/"+Math.random(); 
  xmlHttp.open("GET",url,true); // 非同步處理返回
  xmlHttp.onreadystatechange=favorOK;//傳送事件後,收到資訊了呼叫函式 
  xmlHttp.send(); 
}
function getOkGet(){ //程式碼沒用到吧?
  if(xmlHttp.readyState==1||xmlHttp.readyState==2||xmlHttp.readyState==3){ 
    // 本地提示:載入中 
  } 
  if (xmlHttp.readyState==4 && xmlHttp.status==200){ 
    var d= xmlHttp.responseText; 
    // 處理返回結果 
  } 
} 
</script>

post:XMLHttpRequest

基本上同get
xmlhttp.open("POST",url,true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send(); 

    XMLHttpRequest 是 AJAX 的基礎,在建立 XMLHttpRequest 物件時,必須與你寫的ajax方法在同一個‘<script></script>'標籤中!否則ajax請求會出錯,並無法返回資料。 javascript/js的ajax的POST/GET請求

簡單來說:

 var xmlhttp=new XMLHttpRequest();
    var url="/space-uid-"+i+".html";
    console.log('visit',url);
    i++;
    xmlhttp.open("GET",url,true); //第三個引數是同步非同步,主執行緒只能非同步
    xmlhttp.send();

較為完整的一個流程:get【

jQuery:先引入js【

$.get();
$.post();

//example
var params = {id:1,name:'tom'};
url = '/test_post.php';
$.post(url,params,function(data){
    alert(data);//這個data就是test_post.php返回的資料
});