Javascript jQuery Ajax无法调用MVC4控制器方法
我试图使用jQuery在单击某个按钮后触发Ajax调用。我已经阅读了一些语法示例和可能遇到的问题,但未能找到适合我的原因的有效解决方案。这是密码 控制器方法:(HomeController.cs) jQuery代码:Javascript jQuery Ajax无法调用MVC4控制器方法,javascript,jquery,ajax,asp.net-mvc-4,Javascript,Jquery,Ajax,Asp.net Mvc 4,我试图使用jQuery在单击某个按钮后触发Ajax调用。我已经阅读了一些语法示例和可能遇到的问题,但未能找到适合我的原因的有效解决方案。这是密码 控制器方法:(HomeController.cs) jQuery代码: function changeCompany(company) { $.ajax({ url: '@Url.Action("ChangeCompany", "Home")', type: 'POST', data: J
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);
}
});
}
最后,我用以下方法调用此函数:
$('.companyButton').click(function () {
compCode = $(this).text();
debug("Click event --> " + $(this).text());
changeCompany(compCode);
});
我的调试消息显示正确,Ajax调用不断失败,并发出以下警报:R:[object]S:error E:Not Found
我不完全确定该怎么做
我知道在这个主题上有几个问题,但是没有一个能解决我的问题,我也不确定这些代码块到底出了什么问题。如有任何见解,将不胜感激
编辑:
值得注意的是,这是针对移动设备的。在Windows8手机仿真器(InternetExplorer)和jQuery Mobile上进行测试。不确定这是否会影响Ajax
编辑2:
查看原始网络调用后,似乎
'Url.Action(“ChangeCompany”、“Home”)
没有被转换为正确的Url,而是被直接调用,就好像它是原始Url文本一样。这是由于过时的jQuery还是其他因素造成的?在AJAX调用中缺少一些重要参数。更改AJAX调用,如下所示:
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);
}
});}
然后,您可以使用[HttpPost]
属性注释控制器方法,如下所示
[HttpPost]
public JsonResult ChangeCompany(string companyCode)
{
return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet);
}
请注意,您的操作不会直接返回
companyCode
。因此,您将其分配给Jsonresult
属性
在“成功”功能中,要显示结果,您需要:
success: function (data)
{
alert("Company: " + data.result);
}
另外:
E:notfound
告诉我您可能有一些路由问题。如果您在ChangeCompany
操作中设置了断点,它是否被击中?EDIT2是否正常,您似乎在一个单独的JavaScript文件中使用url:'@url.Action(“ChangeCompany”,“Home”),
。您只能在.cshtml文件中编写razor代码,而它在.js文件中不起作用您的控制器操作方法是什么样子的?另外,在浏览器开发工具中查看原始网络调用,并查看调用的确切内容-这应该有助于排除故障。我认为这是服务器端错误。当你点击请求时,你可以查看Chrome的开发工具条网络部分吗?你可以在预览选项卡中看到响应。如果你在浏览器中查看源代码,url看起来正确吗?如果设置了调试器
在error函数中,仔细查看参数。我在手机模拟器中运行此函数,因此我无法使用常用的浏览器开发工具。我将实现一个ViewSwitcher,这样我就可以在桌面浏览器中对它进行测试,并就开发工具提供的内容与大家联系。好的,请参见编辑#2。@Url.Action解析为正确的Url时出现问题。我执行了以下操作并收到了相同的错误警报。不确定问题是什么。啊,这是有道理的。不知道为什么我认为我可以在视图之外使用它。继续并将URL硬编码到Ajax调用中,现在它工作正常,感谢您的关注!您可以使用url在.cshtml中创建一个变量,并在.js文件中访问它
success: function (data)
{
alert("Company: " + data.result);
}