2012-06-07 13 views
8

Estoy utilizando el nuevo objeto FormData HTML5 para publicar algunos valores y una imagen a través de Ajax. Funciona bien hasta ahora. Ahora, quiero publicar una matriz usando este objeto, pero todo lo que tengo en el lado del servidor es "[objeto - objeto]". ¿Cómo puedo publicar una matriz con formdata?Contabilización de matrices mediante formdata

lo que he conseguido hasta ahora

var formData=new FormData(); 
formData.append('text', $('#text').attr('value')); 
formData.append('headline',$('#headline').attr('value')); 
formData.append('myarray',{key1: 'bla', key2: 'blubb'}); 

La última línea de trabajo Indiferente. Envío la solicitud con este código

    $.ajax({ 
         url: 'xyz', 
         data: formData, 
         type: 'POST', 
         processData: false, 
         contentType: false, 
         success: function(data) { 
          var decoded=$.parseJSON(data); 
          displaySuccess('Success', decoded.message); 
         },error: function(data){ 
          var decoded=$.parseJSON(data); 
          displayError('Error', decoded.message); 
         },complete: function(data){ 
          $('#cursor').hide(); 
          $("#submitbutton").removeAttr('disabled') 
         } 
        }); 

Gracias de antemano.

Respuesta

3

Según su sintaxis, parece que intenta pasar un objeto, no una matriz. No creo que puedas pasar objetos a través de un formulario HTML.

{ key1 : value1 , key2 : value2 } 

vs

[ value1, value2 ] 

Ésta es una referencia útil a lo general JS syntax

+0

sí puede pasar objetos! pruébalo con el campo de datos de jquery. acaba de crear un objeto complejo y lo pasó y mantuvo la misma estructura en el servidor –

+0

Hola @DanyKhalife ¿cómo lo lograste? Tengo un problema similar. – uikrosoft

+0

@uikrosoft Puede pasar el objeto tal como está a jQuery. Supongamos que tiene un objeto 'var myData = {a: 1, b: 2, c: [3,4,5]};' la llamada de jQuery será algo así como '$ .ajax ({url: '/ myscript. php ', método:' POST ', datos: myData, dataType:' json ', success: function (response) {console.log (response);}}) ' –

15

Usando .append() en cada elemento de la matriz asociativa podrían producir los resultados que usted está esperando.

En lugar de esta línea:

formData.append('myarray',{key1: 'bla', key2: 'blubb'}); 

Usted puede tratar lo siguiente:

var myarray = {key1: 'bla', key2: 'blubb'}; 

jQuery.each(myarray, function(key, value) { 
    formData.append('myarray['+key+']', value); 
}); 
4

Gracias. Ahora se me ocurrió esta solución:

   for (i = 0; i < social_networks.length; i++) { 
        formData.append("myarray["+i+"][mykey]",arr[i]['mykey']); 
        formData.append("myarray["+i+"][mykey2]",arr[i]['mykey2']); 
       } 
+0

Si crees que esa es la mejor respuesta, entonces debes aceptarla, ayudar a otros en el futuro – Mawg

2

Pruebe esto. Funcionó para mí

var files = $scope.myFile; 
     var fd = new FormData(); 
     fd.append("file", files[0]); 
     fd.append("assignment", JSON.stringify({ classAssignment: $scope.editItem })); 
Cuestiones relacionadas