Ajax跨域查询完美解决通过$.getJSON()实现

原因:浏览器安全上做了限制,禁止ajax跨域获得数据。

  解决方法:通过jquery提供的$.getJSON()可以跨域获得JSON格式的数据。优点:兼容性强。

  Java后台代码:

  

复制代码 代码如下:

  protected void doPost(HttpServletRequest req, HttpServletResponse resp)

  throws ServletException, IOException {

  String callback =req.getParameter("callback");//jquery生成的自定义函数名

  resp.setCharacterEncoding("UTF-8");

  resp.setContentType("text/html;charset=utf-8");

  PrintWriter out = resp.getWriter();

  //返回json格式字符串,注意向前台输出的格式必须为 callback(json格式的字符串);

  //callback是jquery生成的自定义函数名,返回这种格式,前台jquery代码会自动替换

  //回调函数为此callback函数,从而达到跨域的效果,网上还有其他的跨域方案如:AJAJ

  //原理应该也是和此方法一样。缺点是:返回数据量不宜过大,安全性差,建议重要数据不

  //要通过这种形式传递。

  out.print(callback+"({name:'111',sex:'222'});");

  out.flush();

  out.close();

  }

  Js前台调用代码:

  

复制代码 代码如下:

  $(function(){

  //需要传的参数,可以不传。

  var data= {param1:"param1",param2:"param2"};

  //注意url一定要以callback=?的形式拼接,callback参数名可以自定义,

  //但后台必须也要同步获取的参数名

  var url = 'http://192.168.1.216:8080/DSFA/getUser?callback=?';

  $.getJSON(url,data,function(backdata){

  //其实后台返回的函数已经替换为此函数,所以backdata

  //就是你从后台传过来的json对象。

  alert(backdata);

  });

  })

  如果有不明白的地方,请留言....