我尝试将一些数据发送到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
函数,它正在向servlet发送一些JSON数据。就我而言,它是var b
。
我很确定存在编码问题,但我不知道如何修复它。
请帮助我解决这个奇怪的问题,我已经工作了很多时间,我找不到解决方案。
答案 0 :(得分:1)
您应该在某个时候取消输出。我建议在servlet端做这件事。
答案 1 :(得分:1)
看起来servlet正在接收为URL编码的代码。如果可以控制servlet上的代码,则可以在servlet端对其进行解码。
例如,在PHP中,使用urldecode()
希望这有帮助。
答案 2 :(得分: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]) +'" />';
});
答案 3 :(得分:1)
问题是您对数据进行了两次urlencode。首先在您的javascript中明确显示,然后在创建表单时隐式显示。在执行请求之前,浏览器对您“很好”,并对输入参数进行urlencode。
在将参数添加为输入值之前解码参数,或者更改构建数据的方式以避免显式编码。