2010-08-21 9 views
16

Je suis en train de faire un appel HTTP POST avec multipart/form-data, en utilisant jQuery:Faire un appel HTTP POST avec multipart/form-data en utilisant jQuery?

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

Il ne fonctionne pas. Firebug renvoie une erreur indéfinie et le champ multipartie d'objet XMLHttpRequst retourné est défini sur false.

Que puis-je faire pour que cela fonctionne avec jQuery? Et si ce n'est pas possible, y a-t-il un moyen simple d'y parvenir?

c.-à-d. Que vous n'avez pas besoin de transférer des fichiers, juste quelques données. mais le serveur nécessite plusieurs parties.

Répondre

11

multipart/form-data ne regarde pas comme ceci:

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

C'est application/x-www-form-urlencoded.

Voici une example de comment multipart/form-data demande ressemble. Et les RFC 1867 connexes.

multipart/form-data est assez souvent associé au téléchargement de fichiers. Si c'est votre cas, vous pouvez jeter un oeil à la jquery form plugin qui vous permet d'ajaxifier les formulaires et supports file uploads ainsi.

0

De cette façon fonctionne:

$("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

si les données que je suis en train d'envoyer n'est pas réellement sous une forme à part entière? –

+0

Je reçois une erreur disant qu'attr n'est pas défini pour la partie qui définit le contentType. –

1

En utilisant FormData(), vous pouvez télécharger des fichiers via demande ajax.

Référez ce lien pour plus d'informations: FormData

Tutoriel au sujet de l'aide FormData: tutorial

+2

FormData n'est pas compatible avec ie8/9 – Exegesis

+0

Regardez ici pour FormData dans ie8/9 hack - http://stackoverflow.com/q/8286934/1429387 – naXa