Java 奇怪的解析问题
我试图将一些数据发送到servlet,然后从中获取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
.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中显式编码,然后在创建表单时隐式编码。浏览器将是“不错的”在执行请求之前,对输入参数进行编码
要么在将参数添加为输入值之前对其进行解码,要么改变构建数据的方式以避免显式编码。这就是我要找的!当您是初级开发人员时,会有一些缺点。非常感谢您的帮助!这就是我要找的!当您是初级开发人员时,会有一些缺点.非常感谢你的帮助!