por - llamar a un controlador desde jquery
Cómo pasar múltiples parámetros desde una llamada ajax a un controlador MVC (4)
Tengo el controlador como el siguiente:
public ActionResult Save(string input, string name) {
//Some code
return PartialView();
}
Y necesito una llamada ajax a este método de controlador y pasar los dos argumentos, entrada y valor
Y mi llamada ajax es como la siguiente:
$.ajax({
url: ''/Home/Save'',
type: ''POST'',
async: false,
dataType: ''text'',
processData: false,
data: "input=" + JSON.stringify(data) + "&name =" + $("#name").val(),
success: function (data) {
}
});
No puedo pasar el valor al parámetro de nombre. El valor del parámetro de nombre se está volviendo nulo. Por favor, ayúdame. Gracias de antemano.
Además de las publicaciones de @xdumain, prefiero crear un objeto de datos antes de la llamada ajax para que pueda depurarlo.
var dataObject = JSON.stringify({
''input'': $(''#myInput'').val(),
''name'': $(''#myName'').val(),
});
Ahora utilízalo en llamada ajax
$.ajax({
url: "/Home/SaveChart",
type: ''POST'',
async: false,
dataType: ''json'',
contentType: ''application/json'',
data: dataObject,
success: function (data) { },
error: function (xhr) { } )};
Está realizando una POST HTTP, pero tratando de pasar parámetros con la sintaxis de cadena de consulta GET. En un POST, los datos se pasan como parámetros con nombre y no utilizan la sintaxis param=value&foo=bar
. El uso del método ajax de jQuery le permite crear un objeto javascript con los parámetros nombrados, de esta manera:
$.ajax({
url: ''/Home/SaveChart'',
type: ''POST'',
async: false,
dataType: ''text'',
processData: false,
data: {
input: JSON.stringify(IVRInstant.data),
name: $("#wrkname").val()
},
success: function (data) { }
});
Hice eso con la ayuda de esta pregunta.
jQuery obtener cadenas de consulta de la URL
así que vamos a ver cómo vamos a utilizar esta función
// Read a page''s GET URL variables and return them as an associative array.
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf(''?'') + 1).split(''&'');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split(''='');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
Y ahora solo usalo en Ajax call
"ajax": {
url: ''/Departments/GetAllDepartments/'',
type: ''GET'',
dataType: ''json'',
data: getUrlVars()// here is the tricky part
},
eso es todo, pero si desea saber how to use this function
o not send all the query string parameters
a la respuesta real
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "ChnagePassword.aspx/AutocompleteSuggestions",
data: "{''searchstring'':''" + request.term + "'',''st'':''Arb''}",
dataType: "json",
success: function (data) {
response($.map(data.d, function (item) {
return { value: item }
}))
},
error: function (result) {
alert("Error");
}
});