Dapatkah seseorang menjelaskan dengan cara mudah bagaimana membuat jQuery mengirim JSON yang sebenarnya, bukan string kueri?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
Ini sebenarnya akan mengkonversi JSON Anda disiapkan dengan hati-hati ke string kueri. Salah satu hal yang mengganggu adalah benda apa pun yang ada array: []
di objek Anda akan dikonversi array[]: []
, mungkin karena batasan dari sengatan kueri.
javascript
jquery
json
query-string
Redsandro
sumber
sumber
dataType
ada hubungannya dengan bagaimana data dikirim. Ini hanya menentukan jenis data yang Anda harapkan telah dikembalikan oleh panggilan. Jika Anda ingin menunjukkan ke server jenis data apa yang Anda tentukan didata
properti, Anda perlu mengaturcontentType
properti yang mirip dengancontentType: "application/json"
Jawaban:
Anda perlu menggunakan
JSON.stringify
untuk membuat serialkan objek Anda terlebih dahulu ke JSON, dan kemudian tentukancontentType
agar server Anda memahami JSON itu. Ini harus melakukan trik:Perhatikan bahwa
JSON
objek tersebut tersedia secara native di browser yang mendukung JavaScript 1.7 / ECMAScript 5 atau lebih baru. Jika Anda membutuhkan dukungan sebelumnya, Anda dapat menggunakan json2 .sumber
contentType: 'application/json'
.POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard
$_POST
dalam php Anda hanya dapat melihatapplication/x-www-form-urlencoded
, jika Anda ingin membaca data json yang harus Anda lakukanfile_get_contents("php://input")
dan mungkin kemudianjson_decode()
Tidak,
dataType
opsinya adalah untuk mem-parsing data yang diterima.Untuk mengeposkan JSON, Anda harus menyesuaikannya sendiri
JSON.stringify
dan mengaturprocessData
opsifalse
.Perhatikan bahwa tidak semua browser mendukung
JSON
objek tersebut, dan meskipun jQuery memilikinya.parseJSON
, ia tidak menyertakan stringifier; Anda akan membutuhkan perpustakaan polyfill lain.sumber
processData
kefalse
tidak perlu karenaJSON.stringify
sudah mengembalikan string.encodeURIComponent
, bukan?Meskipun saya tahu banyak arsitektur seperti ASP.NET MVC memiliki fungsionalitas bawaan untuk menangani JSON.stringify sebagai contentType situasi saya sedikit berbeda jadi mungkin ini dapat membantu seseorang di masa depan. Saya tahu itu akan menyelamatkan saya berjam-jam!
Karena permintaan http saya sedang ditangani oleh API CGI dari IBM (lingkungan AS400) pada subdomain yang berbeda, permintaan ini berasal dari silang, karenanya jsonp. Saya sebenarnya mengirim ajax saya melalui objek javascript. Berikut adalah contoh dari POST ajax saya:
sumber
Jika Anda mengirim ini kembali ke asp.net dan memerlukan data di request.form [] maka Anda perlu mengatur tipe konten menjadi "application / x-www-form-urlencoded; charset = utf-8"
Posting asli di sini
Kedua singkirkan Datatype, jika Anda tidak mengharapkan pengembalian, POST akan menunggu sekitar 4 menit sebelum gagal. Lihat di sini
sumber