Avatar billede htx98i17 Professor
01. september 2017 - 16:37 Der er 4 kommentarer og
1 løsning

Form submit fil med ajax

Jeg vil gerne uploade en fil med ajax + php.
Jeg har hidtil kun brugt GET og har ikke sendt data fra en form før.

Jeg ved ikke hvordan jeg får fil-data sendt/postet/vedhæftet eller hvad man nu siger.

Håber nogen kan give et hint.


xhttp.open("POST", "actions/upload.php", true);
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send("id=1&data=" + fil );



<input type="file" onchange="upload(this.value)" name="fil" > ?
Avatar billede htx98i17 Professor
01. september 2017 - 18:18 #1
Jeg har stykket følgende sammen

Det virker slet ikke, ikke engang den linje der skal forhindre browseren i at submitte :)




var form = document.getElementById('file-form');
var fileSelect = document.getElementById('file-select');
var uploadButton = document.getElementById('upload-button');

form.addEventListener("onsubmit", function(event) {
   
    event.preventDefault(event);
   
    var files = fileSelect.files;
    var formData = new FormData();
   
    // Loop through each of the selected files.
    for (var i = 0; i < files.length; i++) {
          var file = files[i];
       
          // Check the file type.
          if (!file.type.match('image.*')) {
            continue;
          }
       
          // Add the file to the request.
          formData.append('photos[]', file, file.name);
    }
       
    // Files
    formData.append(name, file, filename);
   
    // Blobs
    formData.append(name, blob, filename);
   
    // Strings
    formData.append(name, value);
       
    var xhttp = new XMLHttpRequest();
   
    xhttp.onreadystatechange = function() {
       
       
          if (this.readyState == 4 && this.status == 200) { //succes
           
            alert('Uploade succes');
           
        } else if(this.readyState == 4 && (this.status == 403 || this.status == 404 || this.status == 401 || this.status == 408)) { //error
       
       
        } else if(this.readyState <4) { //pending
           
        }
    };
 
    xhttp.open('POST', 'actions/uploadbillede.php', true);
    xhttp.send(formData);
   
}


HTML

<form id="file-form" >
<input type="file" id="file-select" multiple>
<input type="submit" id="upload-button" >
</form>
Avatar billede Slater Ekspert
01. september 2017 - 19:21 #2
Der er ret mange fejl i den kode.

For det første mangler du en afsluttende parentes til sidst, altså }); i stedet for }

For det andet hedder eventen "submit", ikke "onsubmit".

For det tredje tager preventDefault() intet argument.

For det fjerde er de fleste af dine variabler ikke defineret noget sted. Hverken "file", "name", "blob", "filename" eller "value" eksisterer, når du forsøger at bruge dem.

Sikkert mere. Det kræver lidt oprydning før man kan reelt fejlsøge.
Avatar billede htx98i17 Professor
01. september 2017 - 19:36 #3
Ja det vidste jeg godt der var, men jeg har ikke fattet brugen af de variabler som ikke er defineret. Der fremgik ikke nok for dummies i den guide jeg fandt det :)

Jeg har rette de fejl du har nævnt, pånær det med de variabler som ikke er sat.
Jeg har ikke forstået hvad jeg skal med dem. Det er de der //files //blobs og //strings



var form = document.getElementById('file-form');
var fileSelect = document.getElementById('file-select');
var uploadButton = document.getElementById('upload-button');

form.addEventListener("submit", function(event) {
   
    event.preventDefault();
   
    var files = fileSelect.files;
    var formData = new FormData();
   
    // Loop through each of the selected files.
    for (var i = 0; i < files.length; i++) {
          var file = files[i];
       
          // Check the file type.
          if (!file.type.match('image.*')) {
            continue;
          }
       
          // Add the file to the request.
          formData.append('photos[]', file, file.name);
    }
       
    // Files
    formData.append(name, file, filename);
   
    // Blobs
    formData.append(name, blob, filename);
   
    // Strings
    formData.append(name, value);
       
    var xhttp = new XMLHttpRequest();
   
    xhttp.onreadystatechange = function() {
       
       
          if (this.readyState == 4 && this.status == 200) { //succes
           
            alert('Uploade succes');
           
        } else if(this.readyState == 4 && (this.status == 403 || this.status == 404 || this.status == 401 || this.status == 408)) { //error
       
       
        } else if(this.readyState <4) { //pending
           
        }
    };
 
    xhttp.open('POST', 'actions/uploadbillede.php', true);
    xhttp.send(formData);
   
});
Avatar billede htx98i17 Professor
01. september 2017 - 19:39 #4
Og jeg har ikke forstået variablen "event", er der ikke en fejl der også...
Avatar billede htx98i17 Professor
02. september 2017 - 18:33 #5
Har løst det
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester