我使用以下js脚本将变量从Web表单发布到python脚本然后生成docx文档,然后响应ajax POST下载它,我可以成功获取文件,但它似乎已损坏当试图用word打开时(可能是由于编码错误),文件大小约为300K,但下载时大小为500K
我想使用ajax脚本的原因是我可以得到一个完整的处理情况,有时服务器端python脚本返回错误,我想用ajax显示这个给用户理解发生了什么事。
如何修改js脚本以正确保存docx文件。我为ajax帖子尝试了不同的dataType
,但是在使用text
类型之外的任何内容时都会出现解析错误。
代码:
var url = $('#myform').attr('action');
var data = $('#myform').serialize();
$.ajax({
type: "post",
url: url,
data: data,
dataType: 'text',
success: function(responseData,textStatus, xhr)
{
console.log('got response' + textStatus + xhr.getResponseHeader("Content-Disposition"));
var blob=new Blob([responseData],{type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="test.docx";
link.click();
},
error: function (jqXHR, exception)
{
var msg = '';
if (jqXHR.status === 0) {
msg = 'Not connect.\n Verify Network.';
} else if (jqXHR.status == 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status == 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
console.log(msg);
}
})