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來返回了。
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章