在Ajax调用中生成后下载XML



我正在尝试构建一个将和XML导出为下载的函数。我使用了PHP中的XMLWriter函数,它的工作非常好。我实际上得到了我想要的结果,只是,它会在我的AJAX响应中返回,而不是选择下载,我告诉脚本这样做

我的布局如下:

JS+AJAX-

// ///////////////////////////// //
// START EXPORT                  //
// ///////////////////////////// //
function exports(vars){
$.ajax({
url: domain + "/core/ajax/export.php",
type: "post",
dataType: "text",
data: vars,
success: function(data){
if(vars.form == 'export-records'){

}
},
error: function(jqXhr, textStatus, errorMessage){
console.log("Error: ", errorMessage);
}
});
}
$('#export-propperties').bind('submit',function(){
event.preventDefault();
var content = $('#export-propperties').serializeArray().reduce(function (newData, item) {
if (item.name.substring(item.name.length - 2) === '[]') {
var key = item.name.substring(0, item.name.length);
if(typeof(newData[key]) === 'undefined') {
newData[key] = [];
}
newData[key].push(item.value);
} else {
newData[item.name] = item.value;
}
return newData;
}, {});
exports(content);
});

因此,这里发生的是,我将表单作为键值对提交到ajax函数中。工作良好。php过程如下。

// START THE XML HERE
// AFTER THE DATA IS FETCHED WE WILL PARSE IT NORMALLY. WE ARE GOING TO USE THE RESULT LATER, FIRST WE CREATE THE INSTANCE OF THE FILE
// TO DEFINE FIRST THE XML
$writer = new XMLWriter();  
$writer->openURI('php://output');  
$writer->startDocument('1.0','UTF-8');  
$writer->setIndent(4);   

// CREATE THE HEADING OF THE PRODUCTDATA
$writer->startElement('ProductData');  
$writer->writeAttribute('xmlns:xs', 'http://www.w3.org/2001/XMLSchema');  
$writer->writeAttribute('xmlns', 'http://www.gs1.nl/productgegevens/insbou/004');  
$writer->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');  
$writer->writeAttribute('xsi:schemaLocation', 'http://www.gs1.nl/productgegevens/insbou/004 Productgegevens_insbou004.xsd');  
// blablabla xml generation //
$writer->endElement();  
// END OF DOCUMENT
$writer->endDocument();   
$writer->flush();   

问题是,我对代码的响应是XML,而不是所需的XML下载($writer->openURI('php://output');(。我有一种感觉,我无法在AJAX调用中执行下载窗口,或者我错了吗?我该如何解决这个问题?

也许PHP代码顶部的header('Content-Disposition: attachment; filename="filename.xml"');可以工作。我不确定,但试试看
另一个解决方案是FileSaver.js。
对不起我的英语。

最新更新