2010-08-21 9 views
16

Ich versuche, einen HTTP-POST-Aufruf mit multipart/form-data zu machen, mit jQuery:Einen HTTP-POST-Aufruf mit mehrteiligen/Formulardaten mit jQuery durchführen?

$.ajax({ 
    url: 'http://localhost:8080/dcs/rest', 
    type: 'POST', 
    contentType:'multipart/form-data', 
    data: 'dcs.source=boss-web&query=data&dcs.algorithm=lingo&dcs.output.format=JSON&dcs.clusters.only=true', 
    //dataType: "jsonP", 
    success: function(jsonData) {alert('POST alert'); data=jsonData ; }, 
    error : function(XMLHttpRequest, textStatus, errorThrown) { 
      console.log('An Ajax error was thrown.'); 
      console.log(XMLHttpRequest); 
      console.log(textStatus); 
      console.log(errorThrown); 
      } 
}); 

Es funktioniert nicht. Firebug gibt einen undefinierten Fehler zurück und das zurückgegebene XMLHttpRequst Objekt multipart Feld wird auf false festgelegt.

Was kann ich tun, damit dies mit jQuery funktioniert? Und wenn es nicht möglich ist, ist das einfach zu erreichen?

, d. H. Es müssen keine Dateien übertragen werden, nur einige Daten. aber der Server benötigt mehrere Teile.

Antwort

11

multipart/form-data sieht nicht so aus:

dcs.source=boss-web&query=data&dcs.algorithm=lingo&dcs.output.format=JSON&dcs.clusters.only=true 

Dies ist application/x-www-form-urlencoded.

Hier ist ein example von wie multipart/form-data Anfrage aussieht. Und das verwandte RFC 1867.

multipart/form-data ist oft mit dem Hochladen von Dateien verbunden. Wenn dies der Fall ist, können Sie einen Blick auf die jquery form plugin werfen, die es Ihnen erlaubt, Formulare zu ajaxifizieren und auch supports file uploads.

0

Auf diese Weise funktioniert:

$("form#upload-form") 
    .attr("enctype", "multipart/form-data") 
    .attr("encoding", "multipart/form-data"); 
$.ajax({ 
    type: "POST", 
    contentType:attr("enctype", "multipart/form-data"), 
    url: "/adm/oferta_insert", 
    data: dados, 
    success: function(data) { 
     alert(data); 
    } 
}); 

http://www.bennadel.com/blog/1273-Setting-Form-EncType-Dynamically-To-Multipart-Form-Data-In-IE-Internet-Explorer-.htm

+0

Was passiert, wenn die Daten, die ich bin versucht zu senden nicht wirklich in einer vollwertigen Form? –

+0

Ich bekomme eine Fehlermeldung, dass attr nicht für den Teil definiert ist, der den contentType festlegt. –

1

Mit Formdata(), können Sie Dateien per Ajax-Request hochladen.

Siehe diesen Link für weitere Informationen: FormData

Tutorial über die Verwendung von Formdata: tutorial

+2

FormData ist nicht kompatibel mit IE8/9 – Exegesis

+0

Suchen Sie hier nach FormData in ie8/9 Hack - http://Stackoverflow.com/q/8286934/1429387 – naXa