我遇到的问题类似于this stackoverflow
我将选定对象列表发送到“更新”方法。这很好,问题在于成功回调。它不会因某种原因发生。该页面只是闪烁一次。在firebug的网络标签中,我可以看到对网址的调用。控制器返回bool所以在响应中我只有true
。但显然我想做的是根据bool更新页面。这是MVC2项目 - 不确定这是否与它有关。
$.ajax({
url: "/Update/UpdateAll",
dataType: 'json',
type: "POST",
data: { selected: selected, statusID: statusID },
success: function (result) {
if (result) {
alert('all successful');
$('#resultsFromUpdate').html("Success");
}
else {
alert('no deal');
$('#resultsFromUpdate').html("Fail");
}
}
});
和UpdateAll
控制器方法:
public bool UpdateAll(string selected, string statusID)
{
...
> update some things
> return true if fine
> return fasle if not
...
}
这正是使用AJAX的重点,不需要页面发布......所以我做错了什么?
答案 0 :(得分:4)
应该确实有一个JsonResult作为返回类型,因为您指定了“json”作为$ .ajax方法应该期望的内容。此外,$ .post方法通常更容易使用。
答案 1 :(得分:2)
这是一个深入研究Web开发人员免费调试工具库的好地方。
请注意,Chrome,Firefox和IE9都提供了开发人员工具(只需按F12 for IE9)。这些允许您单步执行代码并观察返回的变量。
您还可以使用fiddler来检查浏览器和visual studio之间传递的内容。
请注意,在ASP.NET 3.5中编写的启用JSON的WCF服务返回一个对象,其中返回值是数据成员d
。
你可以试试这个:
$.ajax({
url: "/Update/UpdateAll",
dataType: 'json',
type: "POST",
data: { selected: selected, statusID: statusID },
success: function (result) {
/* NOTE: Not checking result, but result.d */
if (result.d) {
alert('all successful');
$('#resultsFromUpdate').html("Success");
}
else {
alert('no deal');
$('#resultsFromUpdate').html("Fail");
}
}
});
如果我猜对了,我就买彩票: - )
答案 2 :(得分:0)
我的建议是使用Firebug或其他Javascript调试工具和/或指定'错误'回调,至少除了“成功”之外还有“警报”。也许服务器发送的MIME类型不匹配,或者可能还有其他原因。
答案 3 :(得分:0)
这里有很多关于ajax / mvc的问题。您需要指定从控制器方法返回的内容。 检查达林关于这个主题的答案: Problem performing Ajax call from ASP.NET MVC2 app