AJAX问题-处理Zip文件时未捕获语法错误

时间:2013-06-20 作者:voodooGQ

我正在创建一个应用程序,允许用户填写表单,然后在提交时为他们下载一个定制的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 相反

我想我误解了这两种互动方式的一些基本原理,但到目前为止,我还无法找到关于这可能是什么的任何信息。

任何帮助都将不胜感激。

1 个回复
最合适的回答,由SO网友:Rachel Baker 整理而成

在返回AJAX响应之前,请尝试清除缓冲区。

    public function request_handler() {

    $post = $_POST;
    $data = $post[\'data\'];

    $this->zip_file();
    ob_clean();
    echo json_encode($data);

    die();
}

结束

相关推荐

如何使用AJAX加载动态选项

基本上,我正在创建一个选项页面,在该页面中,用户将单击一个按钮来显示一个文本输入字段,然后由用户用名称填充该字段。然后使用ajax将该名称保存到db中(所有这些都已经在工作)。用户可以选择自己想要的任意多个名称。目前,作为对用户的反馈,我正在添加一个包含以前用jQuery保存的名称的列表,但是我想从db加载选项,以检查jQuery收集的信息是否正确。我一直在做一些研究,似乎这样做的方法是wp_localize_script 我发现动态加载创建的数据很麻烦。正在使用wp_localize_script 正确