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

来源:互联网 发布:linux vi修改ip地址 编辑:程序博客网 时间:2024/06/05 18:35

问题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来返回了。
    }

 

原创粉丝点击