Mam następujący kod jquery do wywołania metody webmethod na stronie aspx
$.ajax({
type: "POST",
url: "popup.aspx/GetJewellerAssets",
contentType: "application/json; charset=utf-8",
data: '{"jewellerId":' + filter + '}',
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
a tutaj jest podpis metody internetowej
[WebMethod]
public static string GetJewellerAssets(int jewellerId)
{
To działa dobrze.
Ale teraz muszę uzyskać dwa parametry przekazane do metody internetowej
nowa metoda internetowa wygląda następująco
[WebMethod]
public static string GetJewellerAssets(int jewellerId, string locale)
{
}
Jak zmienić kod klienta, aby pomyślnie wywołać tę nową sygnaturę metody?
EDYTOWAĆ:
Działały dwie następujące składnie
data: '{ "jewellerId":' + filter + ', "locale":"en" }',
i
data: JSON.stringify({ jewellerId: filter, locale: locale }),
gdzie filtr i locale są zmiennymi lokalnymi
data: JSON.stringify({ jewellerId: filter, locale: locale })
to najlepszy sposób, jaki znalazłem, dziękuję @ChrisCaJSON.stringify
z literałem obiektu, MUSISZ podać nazwę parametru z dwukropkiem, wszystko w{}
nawiasach klamrowych. UżywanieJSON.stringify(objectLiteral)
nie działa.[WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)
?Odpowiedzi:
Nie używaj konkatenacji ciągów do przekazywania parametrów, po prostu użyj skrótu danych:
AKTUALIZACJA:
Zgodnie z sugestią @Alex w sekcji komentarzy, ASP.NET PageMethod oczekuje, że parametry w żądaniu będą zakodowane w formacie JSON, dlatego
JSON.stringify
należy je zastosować do skrótu danych:źródło
JSON.stringify( myObject )
do utworzenia ciągu JSON z obiektu javascript, na wypadek gdybyś chciał później zgrupować parametry w klasie.źródło
po prostu dodaj tyle właściwości, ile potrzebujesz do obiektu danych.
źródło
data
po stronie serwera?Nie używaj poniższej metody do wysyłania danych przy użyciu wywołania ajax
Jeśli przez pomyłkę użytkownik wprowadzi znak specjalny, taki jak pojedynczy cudzysłów lub podwójny cudzysłów, wywołanie Ajax nie powiedzie się z powodu niewłaściwego ciągu.
Użyj poniższej metody, aby bez problemu wywołać usługę internetową
W powyższym parametrze jest nazwa obiektu javascript i określamy go jako ciąg znaków podczas przekazywania go do atrybutu data wywołania ajax.
źródło
Czy ktoś jeszcze zauważył, że ciąg / obiekt json jest nieprawidłowy we wszystkich odpowiedziach z wyjątkiem Davida Hedlunda? :)
Obiekty JSON muszą być sformatowane w następujący sposób: {"klucz": ("wartość" | 0 | fałsz)}. Ponadto zapisanie tego jako ciągu wymaga znacznie mniej niż dodawanie znaków do obiektu ...
źródło
źródło
Wystarczy dodać [Ta linia doskonale działa w Asp.net i znajdź pola kontroli sieci w jasonie Np .: <% Fieldname%>]
źródło
źródło
Chodzi o dane, które przekazujesz; musi mieć odpowiednio sformatowany ciąg. Jeśli przekazujesz puste dane, zadziała data: {}. Jednak przy wielu parametrach musi być odpowiednio sformatowany, np
....
data: dataParam
...
Najlepszym sposobem na zrozumienie jest posiadanie obsługi błędów z odpowiednim parametrem komunikatu, aby poznać szczegółowe błędy.
źródło
Pomyślnie przekazałem wiele parametrów za pomocą json
źródło