【前端】 傳送http請求 ajax 跨域
阿新 • • 發佈:2019-02-10
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返回的資料
});