Utilisation de jQuery pour envoyer des données à partir d'un multipart/form-data via ajax

J'ai travaillé tous les jours maintenant, et je ne peux pas le faire fonctionner.

J'ai eu une simple requête ajax à l'aide de la librairie jQuery et je veux envoyer les données que je poste par le biais d'un mutlipart/form-fichier de données d'entrée, cependant, j'ai essayé tout ce que je peux penser.

Mon Fichier de script d'upload est en place en attendant le nom de fichier comme paramètre (essayé sans), mais il ne veut tout simplement pas obtenir les données à partir du fichier d'entrée de la boîte de lui-même.

Quelqu'un pourrait-il svp m'éclairer sur comment faire cela sans un autre plugin (multiples de téléchargement, etc).

Voici mon Code jQuery pour ce bit:

fonction uploadTimesheets(){

$('#waiting').show();

var error = '';

var msg = '';

//Performs the Ajax Request
 var data = $.ajax({
    type        :   'POST',
    url         :   '/ajax/timesheet/uploadNewTimesheets.php',
    dataType    :   'json',
    contentType :   'multipart/form-data',
    data        :   data,
    error       :   error,
    msg         :   msg,
    success     :   function(data){

        if(!data){
            $('#notification').removeClass(this).addClass('notification-success').html(data).show().delay(1200).fadeOut(800);
            getActiveTimesheets(getSelectedPage());
        }else{
            $('#notification').removeClass().addClass('notification-error').html(data.msg + data.errorList).show();
            alert('PHHAIL');
        }

        $('#waiting').hide();
        function(xhr, status, errorThrown){
            $('#waiting').hide();
        }
    }
});

}

Et voici mon PHP script de téléchargement:

    /**
* Creates a directory in the active directory with the given folder name
*
* @author  RichardC
* @param   string    $dirName
* @return  boolean
*/
public function createDir( $dirName ) {
$docRoot = getenv('DOCUMENT_ROOT');
if (!is_dir(sprintf('%s/%s', $docRoot, $dirName))) {
$makeDir = mkdir(sprintf('%s/%s', $docRoot, $dirName));
echo sprintf('Creating a folder called \'/%s/\' ...', $dirName);
if ($makeDir) {
echo '<br />Successfully created the folder.<br />';
return true;
} else {
echo sprintf('<br /> Sorry, please create the folder manually at: %s/%s', $docRoot, $dirName);
return false;
}
}
}
/**
* Uploads either a CSV or an EXCEL file to a temporary directory
*
* @author  RichardC
* @param   Resource    $file
* @return  Boolean     true/false
*/
public function upload( $filename ) {
$filename = (!isset($filename)) ? $this->file : $filename;
//Get the document root
$docRoot = getenv('DOCUMENT_ROOT');
$this->createDir('uploads');
if (($_FILES['file']['type'] == 'application/vnd.ms-excel') || ($_FILES['file']['type'] == 'application/csv') || ($_FILES['file']['type'] == 'text/csv') || ($_FILES['file']['type'] == 'text/comma-separated-values') || ($_FILES['file']['type'] == 'application/excel') &&
($_FILES["file"]["size"] < 1000000)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
} else {
if (file_exists($docRoot . "upload/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
$this->file = $docRoot . '/upload/' . $_FILES["file"]["name"];
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], $docRoot . "/upload/" . $_FILES["file"]["name"]);
$this->file = $docRoot . '/upload/' . $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file";
return false;
}
//Remove the unwanted file now
$this->fileContents = file_get_contents($this->file);
@unlink($this->file);
unset($this->file);
return true;
}

Si quelqu'un peut aider, ce serait très apprécié!

  • Je ne suis pas certain que cela va permettre de fichier de champs... cependant, il y a un plugin JQuery qui gère l'envoi de formulaires avec des fichiers: jquery.malsup.com/form. Une autre option est d'utiliser un téléchargement de fichier plugin comme uploadify.com.
InformationsquelleAutor DarkMantis | 2011-09-22