web-dev-qa-db-fra.com

AJAX issue - Uncaught SyntaxError lors du traitement d'un fichier Zip

Je crée une application qui permettra à un utilisateur de remplir un formulaire puis de télécharger un fichier Zip personnalisé pour lui lors de sa soumission. J'utilise AJAX pour accomplir cette tâche.

    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);
            }
        });
    };

Chaque fois que j'essaie de renvoyer des données de base avec mon gestionnaire ajax, je suis en mesure de renvoyer sans problème, mais lorsque j'essaie de traiter ma méthode de fichier Zip, j'obtiens systématiquement Uncaught SyntaxError: Unexpected token < même si la méthode Zip_file() ne renvoie aucune donnée à la méthode 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));
}

J'ai également testé la méthode Zip_file() de manière autonome en la plaçant dans la fonction init() et elle s'exécute exactement comme je l'aurais souhaité.

/**
 * 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);
}

Il est intéressant de noter que la même chose se produit si je remplace l'appel $this->Zip_file() par une instruction echo de base. Sauf qu'au lieu de me dire que Unexpected token est <, il dit e à la place.

Je pense que je comprends mal quelque chose de fondamental concernant la manière dont ces deux personnes interagissent, mais je n’ai pas encore trouvé d’information sur ce que cela pourrait être.

Toute aide serait appréciée.

2
voodooGQ

Essayez d'effacer le tampon avant de renvoyer votre réponse AJAX.

    public function request_handler() {

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

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

    die();
}
2
Rachel Baker