Java 奇怪的解析问题

Java 奇怪的解析问题,java,jquery,parsing,servlets,Java,Jquery,Parsing,Servlets,我试图将一些数据发送到servlet,然后从中获取.xls文件。为了做到这一点,我使用jquery,但我面临一些奇怪的问题。让我解释一下 下面是我如何将数据发送到servlet以及如何取回生成的文件: jQuery.download = function(url, data, method){ //url and data options required if( url && dat

我试图将一些数据发送到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);
                     },
jQuery.download=函数(url、数据、方法){
//需要url和数据选项
如果(url和数据){
//数据可以是参数字符串或数组/对象
data=typeof data==“string”?数据:jQuery.param(数据);
//将参数拆分为表单输入
var输入=“”;
each(data.split('&'),function(){
var pair=this.split('=');
输入+='';
});
//发送请求
jQuery(“”+输入+“”)
.appendTo('body').submit().remove();
};
};
下载=函数(){
var a=this.mainData();
var b=JSON.stringify(a);
控制台日志(b);
什么=“测试”,
obj=$.extend({WrJOB:“xlsExport”,mainData:b},tJS.getCommonPostData());
var data=$.param(obj);//.replace(/\+/g,'%20');这只是一个测试
下载('/myapp/AppProxy',数据);
},
我的html中的一个按钮正在调用
download
函数,该函数向servlet发送一些JSON数据。在我的例子中,它是
var b

我很确定存在编码问题,但我不知道如何解决它


请帮我解决这个奇怪的问题,我已经为此工作了很多小时,但我找不到解决方案。

您应该在某个时候取消对输出的跟踪。我建议您在servlet端执行此操作。

您应该在某个时候取消对输出的跟踪。我建议在servlet端执行此操作。

看起来servlet正在接收为URL编码的代码。如果您可以控制servlet上的代码,那么您可以在servlet端对其进行解码

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


希望这能有所帮助。

看起来servlet正在接收它的URL编码。如果您可以控制servlet上的代码,那么您可以在servlet端对其进行解码

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

希望这有帮助。

像这样

$.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]) +'" />';         
});
[代码><代码><代码><代码>$扩展({ur编码编码:功能(c)功能(c)功能(c)var)扩展({c.c.toString();var r r=/)及({代码)扩展({ur编码:功能(c)var)c)c)c.c.c.c.c.toString();var r r r r=/,(c)var=/(a-zA-zA-zA-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-9-9-9-9-9-9-9.9....*********)///)///;;而;而(虽然(1)虽然(x1及(1)及(x1及(x1及m(1及m[1)及m[1)及m(1)及(1)及(1)及(1)及(1(b);o=o.replace(m[1],t);}返回o;}); each(data.split('&'),function(){ var pair=this.split('='); 输入+=''; }); 像这样

$.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]) +'" />';         
});
[代码><代码><代码><代码>$扩展({ur编码编码:功能(c)功能(c)功能(c)var)扩展({c.c.toString();var r r=/)及({代码)扩展({ur编码:功能(c)var)c)c)c.c.c.c.c.toString();var r r r r=/,(c)var=/(a-zA-zA-zA-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-9-9-9-9-9-9-9.9....*********)///)///;;而;而(虽然(1)虽然(x1及(1)及(x1及(x1及m(1及m[1)及m[1)及m(1)及(1)及(1)及(1)及(1(b);o=o.replace(m[1],t);}返回o;}); each(data.split('&'),function(){ var pair=this.split('='); 输入+=''; });
问题在于,您需要对数据进行两次URL编码。首先在javascript中显式编码,然后在创建表单时隐式编码。浏览器将对您“友好”,并在执行请求之前对输入参数进行URL编码


在将参数添加为输入值之前对其进行解码,或者更改构建数据的方式以避免显式编码。

问题在于,您需要对数据进行两次URL编码。首先在javascript中显式编码,然后在创建表单时隐式编码。浏览器将是“不错的”在执行请求之前,对输入参数进行编码


要么在将参数添加为输入值之前对其进行解码,要么改变构建数据的方式以避免显式编码。

这就是我要找的!当您是初级开发人员时,会有一些缺点。非常感谢您的帮助!这就是我要找的!当您是初级开发人员时,会有一些缺点.非常感谢你的帮助!