2012-06-07 36 views
8

Korzystam z nowego obiektu FormData HTML5, aby opublikować niektóre wartości i obraz za pośrednictwem Ajax. Do tej pory działa dobrze. Teraz chcę opublikować tablicę za pomocą tego obiektu, ale wszystko, co mam na serwerze, to "[obiekt - obiekt]". Jak mogę opublikować tablicę z formularzami?Umieszczanie tablicy przy użyciu formularza

Co Ive got dotąd

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

Ostatnia linia doesnt pracy. Wysyłam żądanie z tym kodem

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

Z góry dziękuję.

Odpowiedz

3

Z Twojej składni wynika, że ​​próbujesz przekazać obiekt, a nie tablicę. Nie sądzę, że możesz przekazywać obiekty przez formularz HTML.

{ key1 : value1 , key2 : value2 } 

vs

[ value1, value2 ] 

Jest to poręczny odniesienie do ogólnego JS syntax

+0

Tak, możesz przekazywać przedmioty! spróbuj z polem danych jquery. właśnie utworzyłem złożony obiekt i przekazałem go i zachował tę samą strukturę na serwerze –

+0

Witaj @DanyKhalife, w jaki sposób to osiągnąłeś? Mam podobny problem. – uikrosoft

+0

@uikrosoft Możesz po prostu przekazać obiekt, tak jak to jest do jQuery. Powiedzmy, że masz obiekt 'var myData = {a: 1, b: 2, c: [3,4,5]};' wywołanie jQuery będzie podobne do '$ .ajax ({url: '/ myscript. php ', metoda:' POST ', dane: myData, dataType:' json ', sukces: funkcja (odpowiedź) {console.log (odpowiedź);}}) ' –

15

Korzystanie .append() na każdym elemencie tablicy asocjacyjnej może produkować wyniki czekasz.

W miejsce tej linii:

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

Można spróbować wykonać następujące czynności:

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

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

Dzięki. Teraz wymyśliłem to rozwiązanie:

   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

Jeśli uważasz, że to najlepsza odpowiedź, powinieneś ją zaakceptować, aby pomóc innym w przyszłości – Mawg

2

Wypróbuj. To zadziałało dla mnie.

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