Meneruskan Beberapa Parameter ke panggilan ajax jQuery

99

Saya memiliki kode jquery berikut untuk memanggil metode web di halaman aspx

$.ajax({
    type: "POST",
    url: "popup.aspx/GetJewellerAssets",
    contentType: "application/json; charset=utf-8",
    data: '{"jewellerId":' + filter + '}',
    dataType: "json",
    success: AjaxSucceeded,
    error: AjaxFailed
});

dan inilah tanda tangan metode web

[WebMethod]
public static string GetJewellerAssets(int jewellerId)
{

Ini bekerja dengan baik.

Tapi sekarang saya perlu mendapatkan dua parameter yang diteruskan ke metode web

metode web baru terlihat seperti ini

[WebMethod]
public static string GetJewellerAssets(int jewellerId, string locale)
{
}

Bagaimana cara mengubah kode klien agar berhasil memanggil tanda tangan metode baru ini?

EDIT:

2 sintaks berikut berfungsi

data: '{ "jewellerId":' + filter + ', "locale":"en" }',

dan

data: JSON.stringify({ jewellerId: filter, locale: locale }),

dengan filter dan lokal adalah variabel lokal

ChrisCa
sumber
9
data: JSON.stringify({ jewellerId: filter, locale: locale })adalah cara terbaik yang saya temukan, Terima @ChrisCa
Frank Myat Kam
Jika Anda adalah jiwa yang sedih seperti saya, Anda mungkin terjebak dalam hal ini selama berjam-jam. Saat menggunakan JSON.stringifydengan literal objek, Anda HARUS menyertakan nama parameter dengan titik dua, semuanya dibungkus di dalam tanda {}kurung. Menggunakan JSON.stringify(objectLiteral)tidak berhasil.
Kaleb Anderson
Metode tanda tangan seperti [WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)?
Kiquenet

Jawaban:

141

Jangan gunakan penggabungan string untuk meneruskan parameter, cukup gunakan hash data:

$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',
    contentType: 'application/json; charset=utf-8',
    data: { jewellerId: filter, locale: 'en-US' },
    dataType: 'json',
    success: AjaxSucceeded,
    error: AjaxFailed
});

MEMPERBARUI:

Seperti yang disarankan oleh @Alex di bagian komentar, ASP.NET PageMethod mengharapkan parameter menjadi JSON yang dikodekan dalam permintaan, jadi JSON.stringifyharus diterapkan pada hash data:

$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ jewellerId: filter, locale: 'en-US' }),
    dataType: 'json',
    success: AjaxSucceeded,
    error: AjaxFailed
});
Darin Dimitrov
sumber
12
Pertimbangkan juga JSON.stringify( myObject )untuk menggunakan untuk membuat string JSON dari objek javascript, jika Anda ingin mengelompokkan parameter Anda ke kelas nanti.
Alex Bagnolini
1
terima kasih atas balasannya - namun, saya mendapatkan status http 500 ketika saya mencobanya seperti itu. Ada ide? atau bahkan cara men-debugnya? Breakpoint dalam metode web tidak pernah terpukul
ChrisCa
1
kode baru sebagai berikut $ .ajax ({type: 'POST', url: 'popup.aspx / GetJewellerAssets', contentType: 'application / json; charset = utf-8', data: {jewellerId: filter, locale: 'en -US '}, dataType: "json", sukses: AjaxSucceeded, error: AjaxFailed});
ChrisCa
1
Untuk men-debug, pertama-tama lihat FireBug apa respons yang tepat dari server, lalu letakkan titik jeda dalam metode layanan web dan lihat apakah itu tercapai.
Darin Dimitrov
1
Breakpoint dalam metode web tidak pernah terpukul Firebug menunjukkan: "Message": "JSON primitive: jewellerId.", "StackTrace": "di System.Web.Script.Serialization Jadi saya kira sintaks json salah
ChrisCa
18
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',
David Hedlund
sumber
1
ini berhasil: '{"jewellerId":' + filter + ', "locale": "en"}', (jelas saya tidak akan melakukan hardcode lokal ke en, tetapi ini adalah sintaks yang berhasil.
ChrisCa
Ini berhasil untuk saya dengan MVC 3. Saya tidak bisa mendapatkan cara kerja Darwin - mungkin ini adalah MVC 3.
fiat
7

cukup tambahkan properti sebanyak yang Anda butuhkan ke objek data.

 $.ajax({
                    type: "POST",
                    url: "popup.aspx/GetJewellerAssets",
                    contentType: "application/json; charset=utf-8",
                    data: {jewellerId: filter , foo: "bar", other: "otherValue"},
                    dataType: "json",
                    success: AjaxSucceeded,
                    error: AjaxFailed
                });
pixeline
sumber
1
Seperti apa tampilan tanda tangan datametode web dalam kasus ini untuk membaca properti di sisi server?
Flo
5

JANGAN gunakan metode di bawah ini untuk mengirim data menggunakan panggilan ajax

data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}'

Jika karena kesalahan pengguna memasukkan karakter khusus seperti tanda kutip tunggal atau tanda kutip ganda, panggilan ajax gagal karena string yang salah.

Gunakan metode di bawah ini untuk memanggil layanan Web tanpa masalah apa pun

var parameter = {
       jewellerId: filter,
       locale : locale 
};


data: JSON.stringify(parameter)

Di parameter di atas adalah nama objek javascript dan merangkainya saat meneruskannya ke atribut data dari panggilan ajax.

Sumit Jambhale
sumber
3

Apakah ada orang lain yang memperhatikan bahwa string / objek json tidak valid di semua jawaban kecuali jawaban David Hedlund? :)

Objek JSON harus diformat dengan cara berikut: {"key": ("value" | 0 | false)}. Juga, menuliskannya sebagai string membutuhkan lebih sedikit daripada merangkai objek ...

Ariel
sumber
3
$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',      
    data: "jewellerId=" + filter+ "&locale=" +  locale,  
    success: AjaxSucceeded,
    error: AjaxFailed
});
Justinonday
sumber
Bekerja terlalu menggunakan type: GET ?
Kiquenet
atau Anda dapat menggunakan array untuk mengirimkan data di jason.stringyfy (array).
Shekhar Patel
1

Hanya untuk menambahkan [Baris ini bekerja dengan sempurna di Asp.net & temukan Bidang kontrol web di jason Misalnya: <% Fieldname%>]

 data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",
Milind bilonia
sumber
1
    var valueOfTextBox=$("#result").val();
    var valueOfSelectedCheckbox=$("#radio:checked").val();

    $.ajax({
    url: 'result.php',
    type: 'POST',
    data: { forValue: valueOfTextBox, check : valueOfSelectedCheckbox } ,
    beforeSend: function() {

          $("#loader").show();
       },
    success: function (response) {
       $("#loader").hide();
       $("#answer").text(response);
    },
    error: function () {
        //$("#loader").show();
        alert("error occured");
    }
    }); 
Jasbir Rana
sumber
0

Ini semua tentang data yang Anda berikan; memiliki string yang diformat dengan benar. Jika Anda meneruskan data kosong maka data: {} akan bekerja. Namun dengan beberapa parameter, itu harus diformat dengan benar misalnya

var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' +  '}';

....

data: dataParam

...

Cara terbaik untuk memahaminya adalah memiliki penanganan kesalahan dengan parameter pesan yang tepat, sehingga dapat mengetahui kesalahan rinci.

Subodh Patil
sumber
0

Saya berhasil melewati beberapa parameter menggunakan json

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",
pengguna2739266
sumber
jangan pernah melewatkan data pengguna ke parameter tanpa 'pembersihan' sebelumnya.
fcm