老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Ajax跨域問題的解決辦法匯總

這篇文章主要講解了“Ajax跨域問題的解決辦法匯總”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Ajax跨域問題的解決辦法匯總”吧!

為丹鳳等地區用戶提供了全套網頁設計制作服務,及丹鳳網站建設行業解決方案。主營業務為成都網站設計、網站制作、外貿營銷網站建設、丹鳳網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

首先來看看在頁面中如何使用jQuery的ajax解決跨域問題的簡單版:

$(document).ready(function(){
var url='http://localhost:8080/WorkGroupManagment/open/getGroupById"
+"?id=1&callback=?';
$.ajax({
url:url,
dataType:'jsonp',
processData: false, 
type:'get',
success:function(data){
alert(data.name);
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}});
});

這樣寫是完全沒有問題的,起先error的處理函數中僅僅是alert(“error”),為了進一步弄清楚是什么原因造成了錯誤,故將處理函數變 為上面的實現方式。最后一行alert使用為;parsererror。百思不得其解,繼續google,最終還是在萬能的stackoverflow找 到了答案,鏈接在這里。原因是jsonp的格式與json格式有著細微的差別,所以在server端的代碼上稍稍有所不同。

比較一下json與jsonp格式的區別:

json格式:

{
"message":"獲取成功",
"state":"1",
"result":{"name":"工作組1","id":1,"description":"11"}
}

jsonp格式:

callback({
"message":"獲取成功",
"state":"1",
"result":{"name":"工作組1","id":1,"description":"11"}
})

看出來區別了吧,在url中callback傳到后臺的參數是神馬callback就是神馬,jsonp比json外面有多了一層,callback()。這樣就知道怎么處理它了。于是修改后臺代碼。

后臺java代碼最終如下:

@RequestMapping(value = "/getGroupById")
public String getGroupById(@RequestParam("id") Long id,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
String callback = request.getParameter("callback");
ReturnObject result = null;
Group group = null;
try {
group = groupService.getGroupById(id);
result = new ReturnObject(group, "獲取成功", Constants.RESULT_SUCCESS);
} catch (BusinessException e) {
e.printStackTrace();
result = new ReturnObject(group, "獲取失敗", Constants.RESULT_FAILED);
}
String json = JsonConverter.bean2Json(result);
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print(callback + "(" + json + ")");
return null;
}

注意這里需要先將查詢結果轉換我json格式,然后用參數callback在json外面再套一層,就變成了jsonp。指定數據類型為jsonp的ajax就可以做進一步處理了。

雖然這樣解決了跨域問題,還是回顧下造成parsererror的原因。原因在于盲目的把json格式的數據當做jsonp格式的數據讓ajax處理,造成了這個錯誤,此時server端代碼是這樣的:

@RequestMapping(value = "/getGroupById")
@ResponseBody
public ReturnObject getGroupById(@RequestParam("id") Long id,
HttpServletRequest request, HttpServletResponse response){
String callback = request.getParameter("callback");
ReturnObject result = null;
Group group = null;
try {
group = groupService.getGroupById(id);
result = new ReturnObject(group, "獲取成功", Constants.RESULT_SUCCESS);
} catch (BusinessException e) {
e.printStackTrace();
result = new ReturnObject(group, "獲取失敗", Constants.RESULT_FAILED);
}
return result;
}

至此解決ajax跨域問題的第一種方式就告一段落。

追加一種解決方式

追求永無止境,在google的過程中,無意中發現了一個專門用來解決跨域問題的jQuery插件-jquery-jsonp。

有第一種方式的基礎,使用jsonp插件也就比較簡單了,server端代碼無需任何改動。

來看一下如何使用jquery-jsonp插件解決跨域問題吧。

var url="http://localhost:8080/WorkGroupManagment/open/getGroupById"
+"?id=1&callback=?";
$.jsonp({
"url": url,
"success": function(data) {
$("#current-group").text("當前工作組:"+data.result.name);
},
"error": function(d,msg) {
alert("Could not find user "+msg);
}
});

至此兩種解決跨域問題的方式就全部介紹完畢。

補充:Ajax跨域問題有三種解決方案:

1.通過中間過渡層解決跨域問題

(1)通過Web代理  var flightHandler = function(data){  alert('你查詢的航班結果是:票價 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 張。');  };  var url = "http://abc.com:8080/AjaxCrossDomain/data/data.jsp?code=CA1998&callback=flightHandler";  var script = document.createElement('script');  script.setAttribute('src', url);  document.getElementsByTagName('head')[0].appendChild(script); 

后臺data.jsp內容:

<%@ page language="java" pageEncoding="UTF-8"%> 
<% 
String callback = request.getParameter("callback"); 
StringBuilder builder = new StringBuilder(); 
builder.append(callback).append("({").append("\"code\": \"CA1998\",").append("\"price\": 1780,").append("\"tickets\": 5").append("});"); 
out.println(builder.toString()); 
%>

使用jquery的jsonp來實現跨域訪問,例子如下:

 
$(function(){ 
$.ajax({ 
type: "get", 
async: false, 
url: "http://abc.com:8080/AjaxCrossDomain/jsonp/data.jsp", 
dataType: "jsonp", 
jsonp: "callback", 
jsonpCallback:"flightHandler", 
success: function(json){ 
alert('您查詢到航班信息:票價: ' + json.price + ' 元,余票: ' + json.tickets + ' 張。'); 
}, 
error: function(){ 
alert('fail'); 
} 
}); 
}); 

感謝各位的閱讀,以上就是“Ajax跨域問題的解決辦法匯總”的內容了,經過本文的學習后,相信大家對Ajax跨域問題的解決辦法匯總這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!


當前文章:Ajax跨域問題的解決辦法匯總
URL分享:
http://www.xueling.net.cn/article/ijceie.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 久久久久亚洲天堂 | 澳门成免费crm大全 狠狠躁夜夜躁av蜜臀少妇 | 91麻豆精品| 欧美日韩精品一区二区久久 | 毛片色网站 | 国产成人久久精品激情 | 日本免费一区二区视频 | 成人资源www网在线最新版 | 97人人做人人爱 | 国产无人区码SUV | 精品麻豆剧传媒av国产九九九 | 在线不卡日本V二区到六区 欧洲尺码日本尺码专线图片 | 99久久影视 | 久久伦理影院 | 日本免费在线视频不卡一不卡二 | 888夜夜爽夜夜躁精品 | 亚洲AV无码一区二区三区在线播放 | 国产精品12区 | 久久亚洲线观看视频 | 亚洲熟妇无码AV不卡在线播放 | 丝袜美腿国产综合久久 | tube8xxxxx中国| 91?清视频免费?看 | 一本大道久久香蕉成人网 | 性一乱一搞一交一伦一性 | 亚洲色偷偷偷网站色偷一区 | 韩国理伦伦片在线观看 | 好紧好湿好爽免费视频 | 国产精品丝袜久久久久久久不卡 | 亚洲欧美精品人妻一区二区三区 | 无码被窝影院午夜看片爽爽 | 开心亚洲五月丁香五月 | 香港a毛片免费全部播放 | 国产九色 | 国产看黄网站又黄又爽又色 | 欧美一区综合 | 精品免费国产一区二区三区四区介绍 | 久久久妇女 | 亚洲第一无码精品立川理惠 | 欧美大逼视频 | 精品一区二区三区影院在线午夜 |