Partage
  • Partager sur Facebook
  • Partager sur Twitter

Upload un fichier avec Ajax

    22 février 2018 à 11:40:18

    Bonjour,

    J'utilise FormData pour récupérer les infos de mon formulaire. Ensuite je les envoie au PHP via ajax comme on peut le voir ci-dessous:

    $("#boutonValiderAjoutProjet").click(function() {
    
        // Fermeture du modal
        $("#modalAjout").modal("toggle");
    
        var formData = new FormData($("#formAjout")[0]);
    
        $.ajax({
            url: 'php/accesseurs/projets/ajouterProjet.php',
            type: "POST",
            data:   formData,
            success: function(data) {
    
                console.log(data);
            },
            error: function(data) {
    
                alert( 'oups : ' + data );
            },
            complete: function() {
    
                chargerProjets();
            },
            mimeType: "multipart/form-data",
            cache: false,
            contentType: false,
            processData: false
        });
    });

    Du côté PHP, je reçois bien les données comme le montre le var_dump($_FILES) ci-dessous. Mais le fichier n'a en fait pas été envoyé (seulement son nom) car tmp_name est vide !

    array(1) {

      ["imageProjetAjout"]=>

      array(5) {

        ["name"]=>

        array(1) {

          [0]=>

          string(28) "roberto-nickson-g-478667.jpg"

        }

        ["type"]=>

        array(1) {

          [0]=>

          string(0) ""

        }

        ["tmp_name"]=>

        array(1) {

          [0]=>

          string(0) ""

        }

        ["error"]=>

        array(1) {

          [0]=>

          int(1)

        }

        ["size"]=>

        array(1) {

          [0]=>

          int(0)

        }

      }

    }

    J'ai pas trouvé comment faire :o

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2018 à 16:28:22

      Salut:

      est-ce que ton formulaire contient "enctype="multipart/form-data" ?

      Sinon as tu essayé des plugins comme https://github.com/danielm/uploader/ ou http://blueimp.github.io/jQuery-File-Upload/

      Ou alors décrire le code en js:

      function ajax (a) {
          var xhr = null, c;
          if (window.ActiveXObject) {
              try {
                  xhr = new ActiveXObject("Msxml2.XMLHTTP");
              } catch (e) {
                  xhr = new ActiveXObject("Microsoft.XMLHTTP");
              }
          } else {
              xhr = new XMLHttpRequest();
          }
          a.method = a.method || "GET";
          a.success = a.success || function () { };
          a.error = a.error || function () { alert("Error")};
          if (a.method.match(/post/ig)) {
              var form = new FormData();
              for (f in a.data) {
                  form.append(f, a.data[f]);
              }
              c = form;
          } else {
              var e = '';
              for (f in a.data) {
                  e += a.data[f] + '=' + f + '&';
              }
              a.url += e.substr(0, e.length - 1);
          }
          xhr.open(a.method, a.url, true);
          (a.XMLHttpRequest == void 0 || a.XMLHttpRequest) && xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
          xhr.onreadystatechange = function () {
              if (xhr.readyState == 4 && xhr.status == 200) {//si c'est ok
                  var k = xhr.responseText;
                  a.success(k);
              } else if (xhr.readyState == 4 && xhr.status != 200) {// si c'est ko
                  a.error(xhr.responseText, xhr.status);
              }
          };
          xhr.send(c == undefined || !c || c == null ? null : c));
      }
               
      function SendFile() {
          var input = document.getElementById("id_de_l'input");
          ajax({
              method: "POST",
              url: "la_page_cible.php",
              data: {
                  fichier: input.files[0] //[0] car il peut en avoir plusieurs si tu es en multi
              },
              success: function(response) {
                  //ton action
              }
          })
      }

      (je pense que le code marche)

      Voilà bonne journée :)

      • Partager sur Facebook
      • Partager sur Twitter

      Upload un fichier avec Ajax

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown