1

.xlsいくつかのデータをサーブレットに送信してから、そこからファイルを取得しようとしています。これを行うためにjqueryを使用していますが、奇妙な問題に直面しています。説明させてください。

データをサーブレットに送信する方法と、生成されたファイルを取得する方法は次のとおりです。

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のボタンは、downloadJSONデータをサーブレットに送信する関数を呼び出しています。私の場合は ですvar b

エンコーディングの問題があることは確かですが、それを修正する方法がわかりません。

この奇妙な問題を手伝ってください。私はすでに何時間も取り組んでいますが、解決策が見つかりません。

4

4 に答える 4

1

You should unescape your output at some point. I would advise to do it on servlet side.

于 2013-07-03T07:06:22.043 に答える
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]) +'" />';         
});
于 2013-07-03T07:15:37.577 に答える
1

サーブレットが URL 用にエンコードされたものを受け取っているようです。サーブレットのコードを制御できる場合は、サーブレット側でデコードできる場合があります。

たとえば、PHP では urldecode() を使用します。

お役に立てれば。

于 2013-07-03T07:09:17.317 に答える