Saya mencoba memposting objek JSON ke layanan web asp.net.
Json saya terlihat seperti ini:
var markers = { "markers": [
{ "position": "128.3657142857143", "markerPosition": "7" },
{ "position": "235.1944023323615", "markerPosition": "19" },
{ "position": "42.5978231292517", "markerPosition": "-3" }
]};
Saya menggunakan json2.js untuk merangkai objek json saya.
dan saya menggunakan jquery untuk mempostingnya ke layanan web saya.
$.ajax({
type: "POST",
url: "/webservices/PodcastService.asmx/CreateMarkers",
data: markers,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){alert(data);},
failure: function(errMsg) {
alert(errMsg);
}
});
Saya mendapatkan kesalahan berikut:
"Primitif JSON tidak valid:
Saya telah menemukan banyak posting yang berkaitan dengan ini dan tampaknya menjadi masalah yang sangat umum tetapi tidak ada yang saya coba perbaiki masalah ini.
Ketika firebug apa yang sedang diposting ke server terlihat seperti ini:
spidol% 5B0% 5D% 5Bosisi% 5D = 128.3657142857143 & spidol 5B0% 5D% 5ParkmarkPosisi% 5D = 7 & spidol 5B1% 5D% 5Bposisi% 5D = 235.1944023323615 & spiders% 5B% 5B%%% 5% 5% 5%%% 5%% 5%% 5%% 5%%% 5%%%% 5%%% 5%%%% 5%%%% 5%% 5%%%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%% 5%%% 5%%% 5% per%% per%% per% 5% per% per% per%%% 10 %s% %b %dipperpisikawan 5D = 42.5978231292517 & marker% 5B2% 5D% 5BmarkerPosisi% 5D = -3
Fungsi layanan web saya yang dipanggil adalah:
[WebMethod]
public string CreateMarkers(string markerArray)
{
return "received markers";
}
sumber
Jawaban:
Anda sebutkan menggunakan json2.js untuk merangkai data Anda, tetapi data POSTed tampaknya URLEkodekan JSON Anda mungkin sudah melihatnya, tetapi posting ini tentang JSON primitif mencakup mengapa JSON sedang di-URLEkode.
Saya menyarankan agar Anda tidak melewatkan string JSON mentah yang diserialisasi secara manual ke dalam metode Anda . ASP.NET akan secara otomatis JSON membatalkan deserialisasi data POST permintaan, jadi jika Anda membuat serial secara manual dan mengirim string JSON ke ASP.NET, Anda akan benar-benar harus membuat JSON membuat serialisasi string seri JSON Anda.
Saya menyarankan sesuatu yang lebih seperti ini:
Kunci untuk menghindari masalah primitif JSON yang tidak valid adalah dengan mengirimkan jQuery string JSON untuk
data
parameter, bukan objek JavaScript, sehingga jQuery tidak berusaha untuk meng-URLEkode data Anda.Di sisi server, sesuaikan parameter input metode Anda dengan bentuk data yang Anda lewati:
Anda juga dapat menerima array, seperti
Marker[] Markers
, jika Anda mau. Deserializer yang digunakan ASMX ScriptServices (JavaScriptSerializer) cukup fleksibel, dan akan melakukan apa yang dapat dilakukan untuk mengubah data input Anda menjadi tipe sisi server yang Anda tentukan.sumber
contentType
dipertimbangkan jika kita menggunakan GET dan bukan POST?markers
bukan objek JSON. Ini adalah objek JavaScript normal.data:
opsi :Jika Anda ingin mengirim data sebagai JSON, Anda harus menyandikannya terlebih dahulu:
jQuery tidak mengonversi objek atau array ke JSON secara otomatis.
Tapi saya menganggap pesan kesalahan berasal dari menafsirkan respons layanan. Teks yang Anda kirim kembali bukan JSON. String JSON harus dilampirkan dalam tanda kutip ganda. Jadi, Anda harus melakukan:
Saya tidak yakin apakah masalah Anda yang sebenarnya adalah mengirim atau menerima data.
sumber
markers
sebagai string JSON?Saya mencoba solusi Dave Ward. Bagian data tidak dikirim dari browser di bagian payload dari permintaan posting karena contentType diatur ke
"application/json"
. Setelah saya menghapus baris ini semuanya bekerja dengan baik.sumber
Saya telah menemukan yang satu ini juga dan ini adalah solusi saya.
Jika Anda menjumpai pengecualian objek json yang tidak valid saat mem-parsing data, meskipun Anda tahu bahwa string json Anda benar, tegaskan data yang Anda terima dalam kode ajax Anda sebelum mem-parsingnya ke JSON:
sumber
Saya punya pertanyaan,
Saya memposting detail login di json dan mendapatkan string sebagai
"Success"
, tapi saya tidak mendapatkan respons.sumber
Silakan ikuti ini dengan panggilan ajax ke layanan web java var param = {feildName: feildValue}; JSON.stringify ({data: param})
sumber