2013-04-28 6 views
7

mam postać:Jak mogę przesłać dane pliku i formularza za pomocą funkcji przesyłania plików JQuery Blueimp za pomocą Ajax, a nie tylko POST?

<div class="row-fluid"> 

    <div class="span5 row-fluid" id="description" style="margin-left:0px;"> 
     <div> 
      <label>Title</label> 
      <input class="span12" type="text" placeholder="Title" id="description_title" name="description_title"/> 
      <label>Author</label> 
      <input class="span12" type="text" placeholder="Author" id="description_author" name="description_author"/> 
      <label>Tags</label> 
      <input class="span12" type="text" placeholder="Tags" id="description_tags" name="description_tags"/> 
      <label>Description</label> 
      <textarea class="span12" id="description_textarea" name="description_textarea" rows="5" style="resize:none"></textarea> 

      <div id="buttons" class="row-fluid" style="margin-top: 5px"> 
       <div class="span12"> 
       <span class="span5 btn btn-primary btn-file" id="chose_files_btn" onclick="filechose_button.click()">chose files 
        <input id="filechose_button" type="file" name="fileData" data-url="http://localhost:3001/upload/1234567890"/></span> 
       <button id="upload_button" type="submit" name="upload" class="span5 offset2 btn btn-success" disabled="true" onclick="$('#upload_form').trigger('upload_fired');">upload</button> 
       </div> <!-- span12 --> 
      </div> <!-- buttons --> 
     </div> <!-- well --> 
    </div> <!-- video_description --> 
    </div> <!-- row-fluid --> 

Jak mogę zintegrować JQuery Upload Plugin w taki sposób, że po wybraniu pliku z filechose_button mogę włączyć upload_button i przesłać wszystko pola wejściowe i pliki za pomocą AJAX, a nie jak teraz działa po prostu przeładowanie strony po żądaniu POST.

js do przesłania to:

$(function() { 
    $('#filechose_button').fileupload({ 
     dataType: 'json', 
     add: function (e, data) { 
      data.context = $('#upload_button'); 
       $('#upload_button').click(function() { 
        data.submit(); 
       }); 
     }, 
     done: function (e, data) { 
      data.context.text('Upload finished.'); 
     } 
    }); 
}); 

ale nadal nie wysyła dane za pomocą AJAX

+1

umiszczanie plików można użyć do przedstawienia zarówno FileUpload i dodatkowe dane forma: https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional -form-dane – mccannf

+2

:) Pochodzę z tej strony. Napisałem ten kod po przeczytaniu tego podręcznika, ale mam problem, że formularz zostanie wysłany synchronicznie, nie jako AJAX. Funkcja 'data.submit();' nie jest wykonywana przez AJAX – static

+1

Zamiast tworzyć fileupload na polu wejściowym, powinieneś owijać swoje dane wejściowe w formularz i tworzyć pliki zgodnie z id tego formularza. – mccannf

Odpowiedz

5

Problemem było domyślne zachowanie elementu <button> formularza. Usunięcie atrybutu type="submit" niczego nie zmienia. Dlatego zamiast wywoływać moją własną funkcję, button wysyła zwykle żądanie form.

+0

lub możesz po prostu dodać przycisk 'type =" "' – musicvicious

2

@Pere: Upewnij się, że nie używasz przycisków w formularzu. Rozwiązałem go, używając div's z klasą bootstrap btn. To jest mój kod javascript:

//this should not be a <button></button>, but a div 
var submitbtn = $("#submitbtn"); 


//upload an image && form submission 
     $('#avatar').fileupload({ 
      singleFileUploads: true, 
      multipart  : true, 
      dataType   : 'json', 
      autoUpload  : false, 
      url    : 'yourEndpoint', 
      type    : 'POST', 
      add    : function (e, data) { 
       submitbtn.on("click", function() { 

        data.formData = $("#form-activate-user").serializeArray(); 
        data.submit(); 


       }); 
      }, 
      done    : function (result) {} 
      }, 
      fail    : function (e) {}