2013-04-28 5 views
7

Ich habe ein Formular:Wie kann ich eine Datei + Formulardaten mit dem JQuery-Datei-Upload von blueimp mit Ajax hochladen, nicht nur mit 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 --> 

Wie kann ich ein JQuery Hochladen Plugin so integrieren, dass nach einer Datei mit filechose_button Wahl ich die upload_button aktivieren und alle schicken Eingabefelder und Datei (en) mit AJAX, nicht so, wie es jetzt funktioniert, einfach die Seite nach einer POST-Anfrage neu laden.

die js für den Upload ist:

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

aber immer noch sendet er die Daten nicht mit AJAX

+1

Sie Fileupload können sowohl Fileupload und zusätzliche Formulardaten einreichen: https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional -form-data – mccannf

+2

:) Ich kam von dieser Seite. Ich habe diesen Code nach dem Lesen dieses Handbuchs geschrieben, aber ich habe ein Problem, dass das Formular synchron gesendet wird, nicht als AJAX. Das 'data.submit();' wird nicht über AJAX ausgeführt – static

+1

Anstatt Dateiupload für ein Eingabefeld zu erstellen, sollten Sie Ihre Eingaben in ein Formular schreiben und ein Dateiupload mit der ID dieses Formulars erstellen. – mccannf

Antwort

5

Das Problem ist das Standardverhalten des <button> Element der Form war. Das Entfernen des Attributs type="submit" ändert nichts. Anstatt also meine eigene Funktion auszulösen, sendet die button die form über normal POST Anfrage.

+0

oder Sie können einfach 'type =" button "' hinzufügen – musicvicious

2

@Pere: Stellen Sie sicher, dass Sie keine Schaltflächen in Ihrem Formular verwenden. Ich löste es, indem ich divs mit der Klasse bootstrap btn verwendete. Das ist mein Javascript-Code:

//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) {}