Próbuję wywołać metodę kontrolera z javascript i wydaje mi się, że mam problem z jej poprawnym wykonaniem. Mam bardzo małe doświadczenie z javascript i śledziłem inne przykłady tego, jak to zrobić ze stackoverflow, ale wciąż mam pewne problemy - jeśli ktokolwiek może pomóc, to byłoby fantastycznie.Metoda kontrolera wywołującego ASP.NET MVC 5 z JavaScript Error
Zasadniczo próbuję zrobić to ustawić tag .data na obiekcie javascript na ciąg zwracany przez metodę na kontrolerze (ta metoda wywołuje usługę sieci Web, która uruchamia funkcję SQL Server). Metodzie należy podać jeden parametr, który jest używany w funkcji.
Kod jest poniżej:
kod Javascript
for (var i = 0; i < stats.length; i++)
{
var stat = stats[i].data('id');
var color = CallService(stat);
this.node.fill = color;
}
JQuery Metoda
function CallService(id) {
$.ajax({
url: '@Url.Action("CallService", "NodeController")',
type: 'GET',
dataType: 'json',
cache: false,
data: { 'id': id },
success: function (color) {
return color;
},
error: function() {
alert('Error occured');
}
});
}
Metoda Controller
[HttpGet]
public JsonResult CallService(string id)
{
var idNum = Convert.ToInt32(id);
var StationService = new getStationStatus.Service1SoapClient("Service1Soap");
string color = StationService.getStationStatus(idNum);
return Json(color, JsonRequestBehavior.AllowGet);
}
kontroler nazywa się NodeController - co mam na myśli w url: wywołanie ajax.
zasadzie to, co dzieje się, kiedy uruchomić stronę, po raz pierwszy pojawia się błąd mówiąc, że nie można ustawić this.node.fill na wartość null WTEDY pojawia się alert o błędzie occurred- jak powiedziałem jestem całkiem niedoświadczony javascript, więc szczerze mówiąc nie jestem nawet pewien, czy wywołuje metodę w poprawnej kolejności, jeśli dostanę błąd na this.node.fill zanim otrzymam komunikat o błędzie z JQuery.
Każda pomoc lub sugestie są bardzo mile widziane !!!
Podstawowe asynchroniczny błędu kodowania: Nie można zwrócić wartość z połowy funkcji wywołania zwrotnego (jak 'sukcesu:'), jak to się dzieje długo po wyjściu z funkcji. @Igor ma kilka poprawnych sugestii poniżej. –