JQuery ajax çağrısına Birden Çok Parametre geçirin


99

Bir aspx sayfasında bir web yöntemi çağırmak için aşağıdaki jquery koduna sahibim

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

ve işte web yöntemi imzası

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

Bu iyi çalışıyor.

Ama şimdi web yöntemine geçirilen iki parametre almam gerekiyor

yeni web yöntemi şuna benzer

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

Bu yeni yöntem imzasını başarıyla çağırmak için istemci kodunu nasıl değiştirebilirim?

DÜZENLE:

Aşağıdaki 2 sözdizimi çalıştı

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

ve

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

filtre ve yerel ayar yerel değişkenlerdir


9
data: JSON.stringify({ jewellerId: filter, locale: locale })bulduğum en iyi yol, teşekkürler @ChrisCa
Frank

Benim gibi üzgün biriyseniz, saatlerce buna takılıp kalmış olabilirsiniz. Bir JSON.stringifynesne değişmezi ile kullanırken , parametre adını iki nokta üst üste işareti ile eklemeniz ZORUNLU ve tümü küme {}parantezi içine sarılmıştır . Kullanmak JSON.stringify(objectLiteral)işe yaramıyor.
Kaleb Anderson

Yöntem imzası gibi [WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)?
Kiquenet

Yanıtlar:


141

Parametreleri iletmek için dize birleştirme kullanmayın, yalnızca bir veri karması kullanın:

$.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
});

GÜNCELLEME:

@Alex tarafından yorumlar bölümünde önerildiği gibi, bir ASP.NET PageMethod, parametrelerin istekte JSON olarak kodlanmasını bekler, bu nedenle JSON.stringifyveri karmasına uygulanmalıdır:

$.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
});

12
JSON.stringify( myObject )Parametrelerinizi daha sonra bir sınıfa gruplamak istemeniz durumunda, bir javascript nesnesinden bir JSON dizesi oluşturmayı da düşünün .
Alex Bagnolini

1
cevaplar için teşekkürler - ancak, böyle denediğimde 500 http statüsü alıyorum. Herhangi bir fikir? veya hatta nasıl hata ayıklanır? Web yöntemindeki kesme noktası asla isabet
almaz

1
aşağıdaki gibi yeni kod $ .ajax ({type: 'POST', url: 'popup.aspx / GetJewellerAssets', contentType: 'application / json; charset = utf-8', data: {jewellerId: filter, locale: 'en -US '}, dataType: "json", başarı: AjaxSucceeded, hata: AjaxFailed});
ChrisCa

1
Hata ayıklamak için önce FireBug'a, sunucunun tam yanıtının ne olduğuna bakın, ardından web hizmeti yöntemine bir kırılma noktası koyun ve ulaşılıp ulaşılmadığını görün.
Darin Dimitrov

1
Web yöntemindeki kesme noktası hiçbir zaman isabet almıyor Firebug şunu gösteriyor: "Mesaj": "Geçersiz JSON ilkel: jewellerId.", "StackTrace": "System.Web.Script.Serialization'da Bu yüzden
json'un

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

1
bu işe yaradı: '{"jewellerId":' + filter + ', "locale": "en"}', (açıkçası yerel ayarı en için
kodlamayacağım

Bu benim için MVC 3 ile çalıştı. Darin'in çalışma şeklini alamadım - belki bu bir MVC 3 meselesi.
fiat

7

veri nesnesine ihtiyaç duyduğunuz kadar özellik ekleyin.

 $.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
                });

1
dataSunucu tarafındaki özellikleri okumak için bu durumda web yöntemi imzası nasıl görünür ?
Flo

5

Verileri ajax çağrısı kullanarak göndermek için aşağıdaki yöntemi kullanmayın.

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

Kullanıcı yanlışlıkla tek tırnak veya çift tırnak gibi özel bir karakter girerse, ajax çağrısı yanlış dizeden dolayı başarısız olur.

Web hizmetini herhangi bir sorun olmadan aramak için aşağıdaki yöntemi kullanın

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


data: JSON.stringify(parameter)

Yukarıdaki parametre javascript nesnesinin adıdır ve onu ajax çağrısının data özniteliğine geçirirken dizgilendirir.


3

David Hedlund'unki dışında json dizesinin / nesnesinin tüm yanıtlarda geçersiz olduğunu fark eden var mı? :)

JSON nesneleri şu şekilde biçimlendirilmelidir: {"anahtar": ("değer" | 0 | yanlış)}. Ayrıca, onu bir dizge olarak yazmak, nesneyi dizgilendirmekten çok daha azını gerektirir ...


3
$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',      
    data: "jewellerId=" + filter+ "&locale=" +  locale,  
    success: AjaxSucceeded,
    error: AjaxFailed
});

Şu türü kullanarak çok çalışıyor : GET ?
Kiquenet

veya jason.stringyfy (dizi) içindeki verileri iletmek için bir dizi kullanabilirsiniz.
Shekhar Patel

1

Sadece eklemek için [Bu satır Asp.net'te mükemmel çalışıyor ve jason'daki web kontrol Alanlarını bul. Ör: <% Fieldname%>]

 data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",

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");
    }
    }); 

0

Her şey aktardığınız verilerle ilgili; düzgün biçimlendirilmiş dizeye sahip olmalıdır. Boş verileri iletiyorsanız, veri: {} çalışacaktır. Bununla birlikte, birden fazla parametre ile, uygun şekilde biçimlendirilmesi gerekir,

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

....

veri: dataParam

...

Anlamanın en iyi yolu, ayrıntılı hataları bilmek için uygun mesaj parametresine sahip bir hata işleyicisine sahip olmaktır.


0

Json kullanarak birden çok parametreyi başarıyla geçtim

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",

kullanıcı verilerini daha önce 'temizleme' olmadan bir parametreye asla geçirmeyin.
fcm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.