Sto tentando di utilizzare jQuery per attivare una chiamata Ajax dopo aver fatto clic su un determinato pulsante. Ho letto diversi esempi della sintassi e dei problemi che si possono incontrare, ma non sono riuscito a trovare una soluzione funzionante per la mia causa. Ecco il codice.jQuery Ajax non riesce a chiamare su MVC 4 Metodo di controllo
Metodo di controllo: (HomeController.cs)
[HttpPost]
public JsonResult ChangeCompany(string companyCode)
{
return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet);
}
codice jQuery:
function changeCompany(company) {
$.ajax({
url: '@Url.Action("ChangeCompany", "Home")',
type: 'POST',
data: JSON.stringify({ companyCode: company }),
success: function (data) {
alert("Company: " + data);
},
error: function (req, status, error) {
alert("R: " + req + " S: " + status + " E: " + error);
}
});
}
E, infine, chiamo questa funzione con:
$('.companyButton').click(function() {
compCode = $(this).text();
debug("Click event --> " + $(this).text());
changeCompany(compCode);
});
Il mio messaggio di debug viene visualizzato correttamente e la chiamata Ajax fallisce costantemente con il seguente avviso: R: [object Object] S: error E: Not Found
Non sono del tutto sicuro di cosa farne.
So che ci sono diverse domande su questo argomento, ma nessuno di loro sembra risolvere il mio problema e onestamente non sono sicuro di cosa c'è che non va con questi blocchi di codice. Qualsiasi intuizione sarebbe apprezzata.
MODIFICA: Nel caso valga la pena notare, questo è per un dispositivo mobile. Test su Windows 8 Phone Emulator (Internet Explorer), insieme a jQuery Mobile. Non sono sicuro se che colpisce l'Ajax a tutti
EDIT 2: Dopo aver dato un'occhiata alla chiamata di rete grezzo, sembra che 'Url.Action("ChangeCompany", "Home")'
non viene convertito nel URL corretto ed è invece essere chiamato direttamente come se fosse URL cruda testo. È dovuto a un jQuery obsoleto o ad altri fattori?
Come si presenta il tuo metodo di azione Controller? Inoltre, guarda la chiamata di rete grezza nei tuoi strumenti di sviluppo del browser e vedi esattamente qual è la chiamata - questo dovrebbe aiutare a risolvere i problemi. –
Penso che sia un errore lato server. Puoi controllare la sezione Rete della barra degli strumenti Dev di Chrome quando fai clic sulla richiesta per visualizzare la risposta nella scheda Anteprima. –
Se guardi la sorgente nel tuo browser, l'url ha un bell'aspetto? E se imposti un 'debugger;' all'interno della funzione di errore, dai un'occhiata più da vicino ai parametri. –