jQuery memposting JSON

192

pembaruan: Saya ingin meneruskan var valueke server

halo, sama tua, sama tua ... :)

Saya memiliki formulir yang dipanggil <form id="testForm" action="javascript:test()">dan kode area dipanggil<code id="testArea"></code>

Saya menggunakan kode ini untuk merangkai dan menampilkan data di area kode:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

Yang saya inginkan adalah mengirim data ini ke file JSON. Saya telah mengerjakan proyek ini: http://ridegrab.com/profile_old/ dan jika Anda menekan Submit Querytombol Anda akan melihat kepala halaman terisi.

Saya juga ingin menggunakan skrip ini untuk mengirim data:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

Sekali lagi, yang saya inginkan adalah dapat mengirim data JSON itu ke server. Server saya diatur ke update or POSTdata di tempat yang tepat.

Patrioticcow
sumber
saya tidak bisa membuatnya bekerja :) saya tidak tahu bagaimana cara menyatukannya untuk mengirim data ke server ... bahkan jika saya ganti datadengan data: value,... !! ??
Patrioticcow
Pertama, apakah Anda yakin itu bukan masalah koneksi? Jika Anda menetapkan suatu errorfungsi, apakah itu dipanggil? Jika demikian, dengan kesalahan apa?
Wiseguy
1
Meskipun sudah lebih dari setahun, saya akan menjawab pertanyaan terakhir @ Patrioticcow tentang cara melakukannya. Anda melihat opsi "sukses" yang Anda kirim ke metode ajax? Lakukan hal yang sama dengan "kesalahan." Seperti dalam "error: MyErrorHandlingFunction" atau "error: function (error) {[Kode penanganan kesalahan di sini]}"
vbullinger

Jawaban:

218

'data' harus berupa objek JavaScript yang dirubah:

data: JSON.stringify({ "userName": userName, "password" : password })

Untuk mengirim formData, kirim ke stringify:

data: JSON.stringify(formData)

Beberapa server juga memerlukan application/jsonjenis konten:

contentType: 'application/json'

Ada juga jawaban yang lebih terperinci untuk pertanyaan serupa di sini: Jquery Ajax Posting json ke webservice

Kyle Wild
sumber
@tasos Saya pikir inilah yang Anda cari: stackoverflow.com/questions/5806971/…
Kyle Wild
Mengatasi kesalahan di sini; ini akan berfungsi OK untuk skenario sederhana, tetapi pesan yang disandikan dengan url bisa sangat bermasalah, terutama untuk array barang.
FMM
@FMM dan Jonas N - Bisakah kalian membantu saya mencari tahu cara memperbarui jawaban saya untuk kebenaran? Contoh dalam dokumen jQuery (di sini: api.jquery.com/jQuery.post ) membuatnya tampak seolah-olah Anda dapat memposting objek JS atau string, yang membuat saya percaya bahwa jQuery akan menangani semua serialisasi string yang diperlukan .
Kyle Wild
Patrioticcow berkata: "bagaimana jika saya ingin mengirim json dari nilai var" Kecuali jika nilainya adalah array atau objek, ini bukan JSON yang valid.
andsens
1
Pertimbangkan apa yang terjadi ketika data Anda berisi, misalnya, daftar hal-hal: { foo: [1,2,3], bar: 'baz' }. Ini akan mendapatkan bentuk-disandikan sebagai foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(tidak terhapus, itu foo[]=1&foo[]=2&foo[]=3&bar=baz). Mungkin bukan yang Anda inginkan dari sisi server.
FMM
270

Anda memposting JSON seperti ini

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

jika Anda melewatkan objek sebagai settings.data jQuery akan mengubahnya menjadi parameter kueri dan secara default mengirim dengan aplikasi tipe data / x-www-form-urlencoded; charset = UTF-8, mungkin bukan yang Anda inginkan

teknopaul
sumber
@ TimLovell-Smith tidak akan membuat perbedaan karena jQuery tidak akan memproses datastring dalam kasus apa pun
Phil
2

Jika Anda mengirim permintaan posting ini ke domain silang, Anda harus memeriksa tautan ini.

https://stackoverflow.com/a/1320708/969984

Server Anda tidak menerima permintaan posting lintas situs. Jadi konfigurasi server perlu diubah untuk memungkinkan permintaan lintas situs.

nizam.sp
sumber