99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Ajax學(xué)習(xí)之跨域請(qǐng)求詳解

發(fā)布時(shí)間:2017-01-16 11:01  回復(fù):0  查看:2330   最后回復(fù):2017-01-16 11:01  

本文和大家分享的主要是前端開(kāi)發(fā)中,ajax跨域請(qǐng)求相關(guān)內(nèi)容,希望對(duì)大家學(xué)習(xí)ajax有所幫助。

  一、什么是跨域請(qǐng)求

  域名http://www.maiziedu:8080/script/jquery.js,它由http://(協(xié)議)、www(子域名)baidu(主域名)以及8080(端口號(hào))組成,當(dāng)另一個(gè)域名與其中任意一項(xiàng)對(duì)應(yīng)不等的話,那么我們說(shuō)兩個(gè)域名就是跨域的。

  如http://www.maiziedu:8080的頁(yè)面上我們要請(qǐng)求數(shù)據(jù)到http://www.sohu:8080上去,那么就說(shuō)這種請(qǐng)求是跨域請(qǐng)求。

  二、為什么要講跨域請(qǐng)求

  因?yàn)樵谝话愕恼?qǐng)求條件下,我們的請(qǐng)求都是訪問(wèn)到原有服務(wù)。當(dāng)服務(wù)有分開(kāi)的時(shí)候,就必然會(huì)使用跨域請(qǐng)求。如果用原有的請(qǐng)求方式去請(qǐng)求跨域域名,請(qǐng)求是不能成功發(fā)送到后臺(tái)。因此,對(duì)于ajax跨域請(qǐng)求有獨(dú)特的方法使用。

  三、jsonjsonp

  web開(kāi)發(fā)很多時(shí)候都會(huì)用到json數(shù)據(jù),那jsonp是干嘛的?jsonpajax提供的一種跨域請(qǐng)求實(shí)現(xiàn)的方式。首先我們看一下jsonjsonp的數(shù)據(jù)格式

  json

  {

  "message":"獲取成功",

  "state":"1",

  "result":{"name":"工作組1","id":1,"description":"11"}

  }

  jsonp

  callback({

  "message":"獲取成功",

  "state":"1",

  "result":{"name":"工作組1","id":1,"description":"11"}

  })

  大家發(fā)現(xiàn),jsonp其實(shí)就是callback(json)。

  四、如何使用jsonp進(jìn)行跨域訪問(wèn)

  例:

  頁(yè)面js請(qǐng)求

  $(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);

  }});

  });

  后臺(tái)接收數(shù)據(jù)

  @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;

  }

  這樣,就可以達(dá)到跨域請(qǐng)求的目的了,這里注意的是。因?yàn)槲覀?/span>ajax里面請(qǐng)求的數(shù)據(jù)格式是jsonp,那么返回的數(shù)據(jù)格式就是callback(json),如果直接返回json會(huì)報(bào)轉(zhuǎn)換類型失敗。

  五、jQuery插件-jquery-jsonp

  jQuery還提供了專門用于跨域請(qǐng)求的方法:

  var url="http://localhost:8080/WorkGroupManagment/open/getGroupById"

  +"?id=1&callback=?";

  $.jsonp({

  "url": url,

  "success": function(data) {

  $("#current-group").text("當(dāng)前工作組:"+data.result.name);

  },

  "error": function(d,msg) {

  alert("Could not find user "+msg);

  }

  });

  ps:代碼來(lái)源于網(wǎng)絡(luò)

 

來(lái)源:搬磚工

您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?