Cum se păstrează tipurile din șirurile de interogare

Încerc să pun împreună un API care să consume date JSON și am probleme cu păstrarea tipurilor de variabile.

caveat: folosesc Node.js

Având în vedere datele:

{
  id: "string",
  data: [
    {input: [0,1,0], output: [1,1]},
    {input: [1,0,0], output: [1,0]}
  ]
}

Când fac o cerere jQuery ajax post cu acele date este transferată ca:

data[0][input][]    0
data[0][input][]    1
data[0][input][]    0
data[0][output][]   1
data[0][output][]   1
data[1][input][]    1
data[1][input][]    0
data[1][input][]    0
data[1][output][]   1
data[1][output][]   0
id                  string

or: id=string&data%5B0%5D%5Binput%5D%5B%5D=0&data%5B0%5D%5Binput%5D%5B%5D=1&data%5B0%5D%5Binput%5D%5B%5D=0&data%5B0%5D%5Boutput%5D%5B%5D=1&data%5B0%5D%5Boutput%5D%5B%5D=1&data%5B1%5D%5Binput%5D%5B%5D=1&data%5B1%5D%5Binput%5D%5B%5D=0&data%5B1%5D%5Binput%5D%5B%5D=0&data%5B1%5D%5Boutput%5D%5B%5D=1&data%5B1%5D%5Boutput%5D%5B%5D=0

Ceea ce trebuie să fac este să decodific datele de pe server, dar toate valorile array-urilor mele din date sunt transformate în șiruri de caractere .

Există o tehnică pentru păstrarea tipului de valoare, adică: "string" sau "int" etc?

În prezent folosesc modulul qs pe npm pentru a analiza corpul meu de cerere POST.

0

3 răspunsuri

JQuery serializează orice obiect trecut în opțiunea data </​​code> a unei cereri AJAX în formatul application/x-www-form-urlencoded (la fel ca un șir de interogare). Ceea ce doriți este să JSON.stringify() obiectul dvs. și să transmiteți șirul rezultat ca date , împreună cu setarea Content Type răspunsul anterior menționează.

Amintiți-vă că opțiunea dataType specifică modul în care jQuery ar trebui să se ocupe cu răspunsul la cerere, nu cum să codificați corpul solicitării (am fost ars de aceasta) .

0
adăugat

Deoarece este un server JSON, setați Content-Type: application/json în cererea POST, deci veți parsa un obiect mai degrabă decât un șir. Obiectul va păstra tipurile de date. Utilizați req.is ('application/json') pe server pentru a vă asigura că cererea este de tip 'application/json'.

0
adăugat

Aici este o soluție de lucru, sperăm că ajută.

$.ajax({
    type: 'POST',
    data: JSON.stringify(data),
    contentType: 'application/json',
    url: 'http://localhost:3000/endpoint',                      
    success: function(data) {
        //TODO: do something with data   
    }
});
0
adăugat