Javascript jQuery Ajax无法调用MVC4控制器方法

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

我试图使用jQuery在单击某个按钮后触发Ajax调用。我已经阅读了一些语法示例和可能遇到的问题,但未能找到适合我的原因的有效解决方案。这是密码

控制器方法:(HomeController.cs)

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);
        }
    });
}
最后,我用以下方法调用此函数:

$('.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
。因此,您将其分配给Json
result
属性 在“成功”功能中,要显示结果,您需要:

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);
  }