Próbuję użyć jQuery w celu odpalenia połączenia Ajax po kliknięciu określonego przycisku. Czytałem kilka przykładów składni i problemów, które można napotkać, ale nie udało mi się znaleźć działającego rozwiązania dla mojej przyczyny. Oto kod.jQuery Ajax nie zadzwonił do metody kontrolera MVC 4
Metoda Kontroler: (HomeController.cs)
[HttpPost]
public JsonResult ChangeCompany(string companyCode)
{
return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet);
}
Kod 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);
}
});
}
I wreszcie, dzwonię z tej funkcji:
$('.companyButton').click(function() {
compCode = $(this).text();
debug("Click event --> " + $(this).text());
changeCompany(compCode);
});
moją wiadomość debugowania wyświetla się poprawnie, a połączenie Ajax ciągle kończy się niepowodzeniem z następującym ostrzeżeniem: R: [object Object] S: error E: Not Found
Nie jestem do końca pewien, co o tym myśleć.
Wiem, że jest kilka pytań na ten temat, ale żaden z nich nie wydaje się rozwiązać mojego problemu i nie jestem naprawdę pewien, co jest nie tak z tymi blokami kodu. Każdy wgląd byłby doceniony.
EDYCJA: W przypadku, gdy jest to warte odnotowania, dotyczy to urządzenia mobilnego. Testowanie w emulatorze Windows 8 Phone (Internet Explorer), obok jQuery Mobile. Nie jestem pewien, czy to ma wpływ na Ajaxa w ogóle EDYCJA 2: Po obejrzeniu surowego połączenia sieciowego wygląda na to, że 'Url.Action("ChangeCompany", "Home")'
nie jest konwertowany na właściwy adres URL i zamiast tego jest wywoływany bezpośrednio tak, jakby był nieprzetworzonym adresem URL tekst. Czy to z powodu przestarzałej jQuery, czy jakiegoś innego czynnika?
Jak wygląda twoja metoda działania kontrolera? Zobacz także surowe połączenie sieciowe w narzędziach przeglądarki i zobacz, co to jest połączenie - które powinno pomóc w rozwiązywaniu problemów. –
Myślę, że to błąd po stronie serwera. Czy możesz sprawdzić pasek narzędzi Toolbar w przeglądarce Chrome, gdy klikniesz żądanie, aby zobaczyć odpowiedź na karcie Podgląd. –
Jeśli spojrzeć na źródło w przeglądarce, adres URL wygląda dobrze? A jeśli ustawisz 'debugger;' w funkcji błędu, przyjrzyj się parametrom. –