2012-01-26 19 views
7

I mają strukturę danych, takich jak gniazdaszeregowania pakietów danych JSON w jQuery Ajax POST

var s = { 
    "a": "foo", 
    "b": 5, 
    "c": {"d": "a long string"}, 
    "e": { 
     "f": { 
      "g": { 
       "h": [1, 0, -2.1, 1.43] 
      } 
     }, 
     "i": { 
      "j": { 
       "k": [-3.2, 3.003, 0, 0] 
      } 
     } 
    } 
}; 

I mają być przechowywane "a", "b", "c" i "E" klucze zmienna s w tabeli bazy danych, dzięki czemu mogę zrekonstruować je ponownie. Wysyłam s za pośrednictwem posta jQuery Ajax. Wartości będą wstawiane i przechowywane jako zwykły tekst (z wyjątkiem "b", który jest zawsze liczbą).

ajax: { 
    url: uri, 
    type: "POST", 
    data: s, 
    dataType: "json", 
    success: function(data, status) { .. } 
} 

Oto problem, który napotykam. W Firebug widzę moje parametry posta ... są naprawdę pomieszane. Wygląda na to, że dane zostały w odcinkach na poziomie każdego elementu (trochę jak głębokim serializacji), a ja liczyłem na coś jak

e={"f":{"g":{"h":[1,0,-2.1,1.43]}},"i":{"j":{"k":[-3.2,3.003,0,0]}}} 

Aktualizacji: Zamiast, ja otrzymuję następujący (mam Niecytowany ciąg poniżej więc jest bardziej czytelny)

a=foo&b=5&c[d]=a long string&e[f][g][h][]=1&e[f][g][h][]=0&e[f][g][h][]=-2.1&e[f][g][h][]=1.43 

Może robie to w niewłaściwy sposób, więc nie krępuj się poprowadzić mnie lepszy sposób.

Odpowiedz

9

Użyj metody JSON.stringify do serializacji obiektu danych na ciąg i opublikować go. Po stronie serwera po prostu zapisz to tak, jak jest w twoim DB. Wypróbuj to:

ajax: { 
    url: uri, 
    type: "POST", 
    data: { data: JSON.stringify(s) }, 
    dataType: "json", 
    success: function(data, status) { .. } 
} 

Prawie wszystkie współczesne przeglądarki obsługują JSON natywnie. W przeglądarkach, które nie mają go natywnie, możesz dołączyć wymagane js z http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js

+0

+1, szczególnie w przypadku łączenia z JSON2.js w starszych przeglądarkach. –

+0

Jestem dość pewny, że zamierzasz podwójnie zakodować ten obiekt danych, ponieważ wywołujesz stringify na s – Joe

+0

Jeśli wartość danych jest łańcuchem, 'jQuery' po prostu koduje URI, aby był wystarczająco bezpieczny do przesyłania przez HTTP. Nie sądzę, że zakoduje łańcuch. – ShankarSangoli

Powiązane problemy