2013-07-03 116 views
1

我試圖發送一些數據到一個servlet,然後從中取回一個.xls文件。爲了做到這一點,我使用jquery,但我遇到了一些奇怪的問題。讓我解釋。奇怪的解析問題

這裏是我如何發送數據給servlet,我應該如何獲取生成的文件後面:

jQuery.download = function(url, data, method){ 
         //url and data options required 
         if(url && data){ 
          //data can be string of parameters or array/object 
          data = typeof data == 'string' ? data : jQuery.param(data); 
          //split params into form inputs 
          var inputs = ''; 
          jQuery.each(data.split('&'), function(){ 
           var pair = this.split('='); 
           inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; 
          }); 
          //send request 
          jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>') 
          .appendTo('body').submit().remove(); 
         }; 
        }; 

download = function() {  
         var a = this.mainData();   
         var b = JSON.stringify(a); 
         console.log(b); 
         what = "test", 
          obj = $.extend({WrJOB: "xlsExport", mainData: b}, tJS.getCommonPostData());       
         var data = $.param(obj); //.replace(/\+/g, '%20'); its just a test 
         $.download('/myapp/AppProxy', data); 
        }, 

在我的HTML調用該函數download至極一個按鈕發送一些JSON數據到servlet。在我的情況下,它是var b

我很確定有一個編碼問題,但我不知道如何解決它。

請幫助我解決這個奇怪的問題,我已經工作了好幾個小時,但找不到解決方案。

回答

1

你應該在某個時候忽略你的輸出。我會建議在servlet端做。

+0

這就是我一直在尋找!當你是初級開發者時,有一些缺點。非常感謝您的幫助! – Slim

1

它看起來像servlet正在接收它編碼的URL。如果您可以控制servlet上的代碼,那麼您可以在servlet端解碼它。

例如,在PHP中,使用urldecode()

希望這會有所幫助。

1

這樣

$.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/;while(x<c.length){var m=r.exec(c.substr(x)); if(m!=null && m.length>1 && m[1]!=''){o+=m[1];x+=m[1].length; }else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16); o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;},URLDecode:function(s){var o=s;var binVal,t;var r=/(%[^%]{2})/;while((m=r.exec(o))!=null && m.length>1 && m[1]!=''){b=parseInt(m[1].substr(1),16);t=String.fromCharCode(b);o=o.replace(m[1],t);}return o;}}); 

jQuery.each(data.split('&'), function(){ 
    var pair = this.split('='); 
    inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ jQuery.URLDecode(pair[1]) +'" />';   
}); 
1

的問題是,你用urlencode您的數據的兩倍。首先明確地在你的javascript中,然後隱式地創建表單。瀏覽器對你來說「很好」,並在請求前對輸入參數進行urlencode。

在將參數添加爲輸入值之前解碼參數,或更改構建數據的方式以避免顯式編碼。