asp.net - por - Pasar múltiples parámetros a jQuery llamada ajax
jquery ajax mvc asp (10)
Tengo el siguiente código jquery para llamar a un webmethod 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 obtener dos parámetros pasados 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 con éxito 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
¿Alguien más ha notado que la cadena / objeto json no es válida 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 codificar el objeto ...
NO use el siguiente método para enviar los datos usando una llamada ajax
data: ''{"jewellerId":"'' + filter + ''","locale":"'' + locale + ''"}''
Si por error el usuario ingresa un carácter especial como comilla simple o comillas dobles, la llamada ajax falla debido a una cadena incorrecta.
Use el método a continuación para llamar al servicio web sin ningún problema
var parameter = {
jewellerId: filter,
locale : locale
};
data: JSON.stringify(parameter)
En el parámetro anterior se encuentra el nombre del objeto javascript y lo escribe en un string al pasarlo al atributo de datos de la llamada ajax.
No use la concatenación de cadenas para pasar parámetros, solo use un hash de datos:
$.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
});
ACTUALIZAR:
Tal como lo sugiere @Alex en la sección de comentarios, un ASP.NET PageMethod espera que los parámetros se codifiquen en JSON en la solicitud, por lo que JSON.stringify
debe aplicar al hash de datos:
$.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
});
Pasé con éxito varios parámetros usando json
data: "{''RecomendeeName'':''" + document.getElementById(''txtSearch'').value + "''," + "''tempdata'':''" +"myvalue" + "''}",
Se trata de datos que pasas; tiene una cadena con el formato adecuado. Si está pasando datos vacíos, entonces los datos: {} funcionarán. Sin embargo, con múltiples parámetros, debe estar formateado adecuadamente, por ejemplo
var dataParam = ''{'' + ''"data1Variable": "'' + data1Value+ ''", "data2Variable": "'' + data2Value+ ''"'' + ''}'';
....
datos: dataParam
...
La mejor forma de entender es tener un controlador de errores con el parámetro de mensaje adecuado, para conocer los errores detallados.
Solo para agregar [Esta línea funciona perfectamente en Asp.net y busca campos de control web en jason Ej .: <% Fieldname%>]
data: "{LocationName:''" + document.getElementById(''<%=txtLocationName.ClientID%>'').value + "'',AreaID:''" + document.getElementById(''<%=DropDownArea.ClientID%>'').value + "''}",
simplemente agregue tantas propiedades como necesite al objeto de datos.
$.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
});
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");
}
});
$.ajax({
type: ''POST'',
url: ''popup.aspx/GetJewellerAssets'',
data: "jewellerId=" + filter+ "&locale=" + locale,
success: AjaxSucceeded,
error: AjaxFailed
});
data: ''{"jewellerId":"'' + filter + ''","locale":"'' + locale + ''"}'',