天天看点

jquery+getJson+struts2, 跨域访问问题

问题1  跨域无法访问或者放回空

问题2 跨域返回 标签不对

这次使用ajax跨域访问遇到以上问题,网上也找到很多的资料,可都是只说前面或者我着急没有仔细理解。

然后第二天有仔细的进行调试,边看参考手册。

ajax篇解决

预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值:

"xml": 返回 XML 文档,可用 jQuery 处理。

"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。

"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。'''注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)

"json": 返回 JSON 数据 。

"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

"text": 返回纯文本字符串

解决代码

 var url='http://192.168.0.25:8080/peu/webaction.action?result=ik&format=json&jsoncallback=?';

    $.ajax({

     type: "POST",

     url: url,

     data: "",

     dataType:'jsonp',

     async: false,

     success: function(msg){

          //数据data

          //var data = eval('(' + msg.result + ')');

          var string =  msg.result[0] ;

          alert(string);

       },

getJson篇,getJson是对ajax简体封装

  function ajaxList() {   

    var url='http://192.168.0.25:8080/peu/webaction.action?result=ik&format=json&jsoncallback=?';

    $.getJSON(url, function(data){

     //var obj = eval('(' + data.result + ')');

     //alert(data.result[0]);

     alert(data.result[1]);

    });

  }

好了前台都设置了,再好的前台也离不开后台支持。所谓前面一直报错,主要理解

&jsoncallback=? 这个后缀,因为在真正请求的时候是这样的

http://192.168.0.25:8080/peu/webaction.action?result=ik&format=json&jsoncallback=jsonp136685653745920

浏览器自动添加方法名称: jsonp136685653745920

javascript解决跨域返回就是利用 返回参数,所以返回格式必须是

jsonp136685653745920("+json_object+"). 这个是重点啊。理解了这个返回数据格式才能有效。

所以后台篇

 public String execute(){

        try

        {

            String chartData = "20000,9200,1181,12000,7606,13887,12000,12222,8000,9009,11288,12099,11081,12000,7606,13887,12000,12222,22000,9009,11288,12099,1181,6000,7606,13887,12000,12222,22000,9009,11288,12099,12000,17733,9876,12783,12899,13888,13277,14299,12345,12783,12899,13888,13277,14299,12345,12345,14299,12345,12345,15763,12345,15763,12000,17733,9876,12783,12899,8000"; 

            String chartData2 = "9876,12783,12899,13888,13277,14299,12345,12345,14299,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,30000,26000";

            List<String> list = new ArrayList<String>();

            list.add(chartData);

            list.add(chartData2);

            //result = JSONUtil.(list);

            JSONArray arr=JSONArray.fromObject(list);

            String  callback = this.getRequest().getParameter("jsoncallback");

            //log.info(""+callback);

            String jsoncallback = callback+"({'result':"+arr+"})";

            PrintWriter out =  this.getResponse().getWriter();

            out.print(jsoncallback);

            out.flush();

            out.close();

            log.info(""+jsoncallback);

        }

        catch (Exception e)

        {

            // TODO: handle exception

        }

        return null;             //一定是返回null,不然格式还是不正确。也就是说是通过response来返回了。

    }

继续阅读