91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Ajax跨域實現代碼(后臺jsp)

發布時間:2020-10-03 16:19:58 來源:腳本之家 閱讀:191 作者:mdxy-dxy 欄目:web開發

AJAX 教程

AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。

在應用時主要是創建XMLHttpRequest對象,調用指定服務地址。

但是IE中各個版本支持的不太一樣,所以在創建次對象時可能要特殊處理下。

一般如下:

function createXMLHttpRequest(){
 var xmlhttp;
 try{
  xmlhttp = new XMLHttpRequest();//ie7及以上,其他瀏覽器
 }catch(e){
  try{
   xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");//ie6
  }catch(e){
   try{
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");//ie6以下
   }catch(e){
    throw "創建AJAX對象失敗!";
   }
  }
 }
 return xmlhttp;
 }


 var xmlhttp = createXMLHttpRequest();
  xmlhttp.open("GET","http://localhost:8080/SimpleBlog/AjaxTest",true);
  xmlhttp.send(null);
  xmlhttp.onreadystatechange = function(result){
  if(xmlhttp.readyState==4 && xmlhttp.status == 200){
   alter(result.test);
  }
 };

但是瀏覽器再執行javascript代碼時,有個著名的同源策略,這使得跨域請求就不是那么方便了。

那一般都是用什么方式支持跨域呢?

1、通過中間代理服務器,獲取要跨域請求的數據。

2、通過iframe內嵌帶請求域的頁面,來解決跨域訪問問題。

3、通過jsonp方式。

4、不過現在已經提出了XMLHttpRequest Level2(XHR2)允許跨域請求,不過要在server的返回頭中顯示聲明允許跨域請求(瀏覽器的支持情況:http://caniuse.com/#feat=xhr2)。

下面簡單說下jsonp與xtr2。

jsonp:

jsonp簡單的說就是利用<script>標簽來實現跨域請求的調用,因為瀏覽器中腳本的加載是不受同源策略影響的。

function get() {
  var url = 'http://localhost:8080/SimpleBlog/AjaxTest?callback=callback';
  var script = document.createElement('script'); 
  script.setAttribute("type","text/javascript"); 
  script.src = url; 
  document.body.appendChild(script); 
 }
 
 function callback(va){
  alert(va.test);
 }

服務端(java):

 boolean jsonP = false;
 String cb = this.request.getParameter("callback");
 if (cb != null) {
 jsonP = true;
 response.setContentType("text/javascript");
 } else {
  response.setContentType("application/x-json");
 }
 PrintWriter out = response.getWriter();
 if (jsonP) {
  try {
   out.println(cb + "({\"test\":\"1\"})");
   out.flush();
   out.close();
  } catch (Exception e) {
   throw e;
  }
 }

這樣就可以實現跨域調用了。

而我們經常用的jquery已經實現了此類方式的封裝,使用起來更簡單。

$(document).ready(function (){
  $('#jqueryajax').bind('click', function(){
  $.ajax({
   type: 'get',
   async: false,
   url: 'http://localhost:8080/SimpleBlog/AjaxTest1',
   dataType: 'jsonp',
   jsonp: 'callback',
   success: function(json){
    alert(json.result);
   },
   error: function(){
    alert('fail');
   }
  });
  });
 });

服務端(java):
我用了struts是這樣寫的:

public class AjaxTest1 extends ActionSupport {

 private String result;
 public String getResult() {
  return result;
 }
 
 public String execute() {
 
  this.result = "1";
  return "jqueryajax";
 }
}

配置文件:

<action name="AjaxTest1" class="AjaxTest1">
 <result name="jqueryajax" type="json">
  <param name="callbackParameter">callback</param>
 </result>
 </action>

下面說說xtr2:

這個就更簡單了,直接創建調用即可。

function createCORSRequest(method,url){
  var xhr=new XMLHttpRequest();
  if('withCredentials' in xhr){
  xhr.open(method,url,true);
  }else if(typeof XDomainRequest!='undefined'){
   xhr=new XDomainRequest(); 
   xhr.open(method,url);
  }else{
   xhr=null;
  }
  return xhr;
 }
 
 function xhr2(){
  var request=createCORSRequest('GET','http://localhost:8080/SimpleBlog/AjaxTest1');
  if(request){
  request.onload=function(){
   alert(request.responseText);
  }
  request.onerror=function(e){
   alert('error');
  }
  request.send();
  } 
 }

服務端:其實只要在返回response中設置
httpResponse.addHeader("Access-Control-Allow-Origin", "*");
即可。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三台县| 云和县| 富源县| 新河县| 邯郸县| 芜湖市| 长丰县| 海林市| 河南省| 康乐县| 潮州市| 塔河县| 甘德县| 西林县| 德令哈市| 罗甸县| 阜康市| 商都县| 灵璧县| 苍梧县| 乌鲁木齐县| 苗栗市| 灯塔市| 乐陵市| 溆浦县| 郴州市| 濮阳县| 高唐县| 林西县| 特克斯县| 于都县| 阳山县| 连城县| 河北省| 民勤县| 肇庆市| 黑河市| 盐源县| 沾化县| 兰州市| 仁布县|