【发布时间】:2015-03-03 07:22:22
【问题描述】:
我正在尝试从 javascript 调用控制器方法,但我似乎无法正确执行它。我对 javascript 的经验很少,并且已经按照其他示例从 stackoverflow 中执行此操作,但我仍然遇到一些问题 - 如果有人可以提供帮助,那就太好了。
基本上我要做的是将javascript对象上的.data标签设置为控制器上的方法返回的字符串(此方法调用运行SQL Server函数的Web服务)。该方法需要传递一个在函数中使用的参数。
代码如下:
Javascript 代码
for (var i = 0; i < stats.length; i++)
{
var stat = stats[i].data('id');
var color = CallService(stat);
this.node.fill = color;
}
JQuery 方法
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');
}
});
}
控制器方法
[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);
}
控制器被称为 NodeController- 这就是我在 url: call of ajax 中所指的。
基本上发生的事情是当我运行页面时,我首先收到一个错误,说它无法将 this.node.fill 设置为空值 THEN 我收到发生错误的警报 - 比如我说我对 javascript 非常缺乏经验,所以老实说,如果我在收到来自 JQuery 的错误消息之前在 this.node.fill 上收到错误,我什至不确定它是否以正确的顺序调用该方法。
非常感谢任何/所有帮助或建议!!!
【问题讨论】:
-
基本异步编码错误:您不能从回调函数(如
success:)的中间返回值,因为这会在您的函数退出很久之后发生。 @Igor 在下面有一些正确的建议。
标签: javascript c# jquery asp.net-mvc