jquery+getJson+struts2, 跨域訪問問題

來源:互聯網
上載者:User

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

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.