2013-04-28 7 views
7

Ho una forma:Come posso caricare un file + i dati del modulo con il caricamento di file JQuery di blueimp utilizzando Ajax, non solo il 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 --> 

Come posso integrare un JQuery Carica plugin in modo tale, che dopo la scelta di un file con filechose_button posso permettere al upload_button e inviare tutto campi di input e file (s) utilizzando AJAX, non come funziona ora basta ricaricare la pagina dopo una richiesta POST.

i js per il caricamento è:

$(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.'); 
     } 
    }); 
}); 

ma ancora invia i dati non utilizzando AJAX

+1

È possibile utilizzare FileUpload per inviare sia fileupload e dati dei moduli aggiuntivi: https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional -form-data – mccannf

+2

:) Sono venuto da quella pagina. Ho scritto questo codice dopo aver letto quel manuale, ma ho un problema, che il modulo verrà inviato in modo sincrono, non come AJAX. 'Data.submit();' esegue non tramite AJAX – static

+1

Invece di creare fileupload su un campo di input, dovresti inserire i tuoi input in un modulo e creare fileupload contro l'id di quel modulo. – mccannf

risposta

5

Il problema era il comportamento predefinito dell'elemento <button> della forma. La rimozione dell'attributo type="submit" non modifica nulla. Quindi, invece di attivare la mia funzione, il button invia il form tramite la richiesta normalmente POST.

+0

oppure puoi semplicemente aggiungere 'type =" button "' – musicvicious

2

@Pere: assicurarsi di non utilizzare i pulsanti nel modulo. L'ho risolto usando div con la classe btn bootstrap. Questo è il mio codice 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) {}