2010-08-21 18 views
16

estoy tratando de hacer una llamada HTTP POST con multipart/form-data, usando jQuery:Hacer una llamada HTTP POST con multipart/form-data usando 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); 
      } 
}); 

No funciona. Firebug devuelve un error indefinido y el campo de varias partes del objeto XMLHttpRequst devuelto se establece en falso.

¿Qué puedo hacer para que esto funcione con jQuery? Y si no es posible ¿hay un simple para lograr esto?

es decir, no es necesario transferir archivos, solo algunos datos. pero el servidor requiere multiparte.

Respuesta

11

multipart/form-data no se fija en este aspecto:

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

Esta es application/x-www-form-urlencoded.

Aquí hay un example de cómo se ve la solicitud multipart/form-data. Y el relacionado RFC 1867.

multipart/form-data a menudo se asocia con la carga de archivos. Si este es tu caso, puedes echar un vistazo al jquery form plugin que te permite ajaxificar formularios y supports file uploads también.

0

De esta manera funciona:

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

¿Qué pasa si los datos que estoy tratando de enviar no es en realidad en una forma de pleno derecho? –

+0

Aparece un error que dice que attr no está definido para la parte que establece contentType. –

1

Usando FormData(), puede subir archivos a través de peticiones Ajax.

Consulte este enlace para más información: FormData

Tutorial sobre el uso de FormData: tutorial

+2

FormData no es compatible con ie8/9 – Exegesis

+0

mira aquí para FormData en ie8/9 hackeo - http://stackoverflow.com/q/8286934/1429387 – naXa

Cuestiones relacionadas