Tengo el siguiente código jquery para llamar a un método web en una página aspx
$.ajax({
type: "POST",
url: "popup.aspx/GetJewellerAssets",
contentType: "application/json; charset=utf-8",
data: '{"jewellerId":' + filter + '}',
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
y aquí está la firma del método web
[WebMethod]
public static string GetJewellerAssets(int jewellerId)
{
Esto funciona bien.
Pero ahora necesito pasar dos parámetros al método web
el nuevo método web se ve así
[WebMethod]
public static string GetJewellerAssets(int jewellerId, string locale)
{
}
¿Cómo cambio el código del cliente para llamar correctamente a esta nueva firma de método?
EDITAR:
Las siguientes 2 sintaxis funcionaron
data: '{ "jewellerId":' + filter + ', "locale":"en" }',
y
data: JSON.stringify({ jewellerId: filter, locale: locale }),
donde el filtro y la configuración regional son variables locales
data: JSON.stringify({ jewellerId: filter, locale: locale })
es la mejor manera que he encontrado, Thank @ChrisCaJSON.stringify
con un objeto literal, DEBE incluir el nombre del parámetro con dos puntos, todo dentro de{}
llaves. UsarJSON.stringify(objectLiteral)
no funciona.[WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)
?Respuestas:
No use la concatenación de cadenas para pasar parámetros, solo use un hash de datos:
ACTUALIZAR:
Como sugirió @Alex en la sección de comentarios, un PageMethod de ASP.NET espera que los parámetros estén codificados en JSON en la solicitud, por lo que
JSON.stringify
deben aplicarse en el hash de datos:fuente
JSON.stringify( myObject )
para crear una cadena JSON a partir de un objeto javascript, en caso de que desee agrupar sus parámetros en una clase más adelante.fuente
simplemente agregue tantas propiedades como necesite al objeto de datos.
fuente
data
el lado del servidor?No utilice el método siguiente para enviar los datos mediante una llamada ajax
Si por error el usuario ingresa un carácter especial como comillas simples o comillas dobles, la llamada ajax falla debido a una cadena incorrecta.
Utilice el método siguiente para llamar al servicio web sin ningún problema
En el parámetro anterior se encuentra el nombre del objeto javascript y lo codifica al pasarlo al atributo de datos de la llamada ajax.
fuente
¿Alguien más ha notado que la cadena / objeto json no es válido en todas las respuestas excepto en la de David Hedlund? :)
Los objetos JSON deben formatearse de la siguiente manera: {"clave": ("valor" | 0 | falso)}. Además, escribirlo como una cadena requiere mucho menos que encadenar el objeto ...
fuente
fuente
Solo para agregar [Esta línea funciona perfectamente en Asp.net y encuentra campos de control web en jason Eg: <% Fieldname%>]
fuente
fuente
Se trata de datos que pasas; tiene que una cadena formateada correctamente. Si está pasando datos vacíos, entonces los datos: {} funcionarán. Sin embargo, con varios parámetros, debe formatearse correctamente, por ejemplo
....
datos: dataParam
...
La mejor manera de comprenderlo es tener un controlador de errores con el parámetro de mensaje adecuado, para conocer los errores detallados.
fuente
Pasé con éxito múltiples parámetros usando json
fuente