我正在创建一个应用程序,允许用户填写表单,然后在提交时为他们下载一个定制的zip文件。我正在利用AJAX来完成这项任务。
Build.prototype.ajaxHandler = function(method, values) {
jQuery.ajax({
type: \'POST\',
url: WP_LOCALIZED[\'url\'],
data: {
action: \'request_handler\',
method: method,
data: values
}, success: function(data) {
var response = jQuery.parseJSON(data);
console.log(response);
}, error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(XMLHttpRequest, textStatus, errorThrown);
}
});
};
每当我尝试使用ajax处理程序返回基本数据时,我都能够成功地返回而没有问题,但当我尝试处理zip文件方法时,我始终得到
Uncaught SyntaxError: Unexpected token <
即使
zip_file()
方法实际上并没有将任何数据返回给javascript方法。
/**
* AJAX handler
*
* @return {json}
* @since 1.0
*/
public function request_handler()
{
$post = $_POST;
$data = $post[\'data\'];
// If this wasn\'t here it would return my $data variable
$this->zip_file();
die(json_encode($data));
}
我还测试了
zip_file()
通过将其放置在
init()
函数,它就像我所期望的那样运行,没有问题。
/**
* Create Zip File
*
* @return void
* @since 1.0
*/
public function zip_file()
{
$zip = new ZipArchive;
if($zip->open(\'test.zip\', ZipArchive::CREATE) === TRUE) {
if($zip->addEmptyDir($this->_plugin_path . \'assets/temp_files\')) {
// Do stuff
}
$zip->close();
}
header(\'Content-Type: application/zip\');
header(\'Content-disposition: attachment; filename=filename.zip\');
header(\'Content-Length: \' . filesize($zip));
readfile($zip);
}
有趣的是,如果我替换
$this->zip_file()
只需要一个基本的
echo
陈述除了告诉我
Unexpected token
是
<
上面写着
e
相反
我想我误解了这两种互动方式的一些基本原理,但到目前为止,我还无法找到关于这可能是什么的任何信息。
任何帮助都将不胜感激。