5

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

控制器方法:(HomeController.cs)

    [HttpPost]
    public JsonResult ChangeCompany(string companyCode)
    {
        return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet);
    }

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 Object] S: error E: Not Found

我不完全确定该怎么做。

我知道关于这个主题有几个问题,但似乎都没有解决我的问题,老实说,我不确定这些代码块有什么问题。任何见解将不胜感激。

编辑:如果值得注意,这是针对移动设备的。在 Windows 8 Phone Emulator (Internet Explorer) 和 jQuery Mobile 上进行测试。不确定这是否会影响 Ajax

编辑 2:查看原始网络调用后,似乎'Url.Action("ChangeCompany", "Home")'没有被转换为正确的 URL,而是被直接调用,就好像它是原始 URL 文本一样。这是由于过时的 jQuery 还是其他一些因素?

4

3 回答 3

6

好的,您的 EDIT2 似乎您url: '@Url.Action("ChangeCompany", "Home")',在单独的 JavaScript 文件中使用。您只能在 .cshtml 文件中编写剃须刀代码,它在 .js 文件中不起作用

于 2013-06-18T17:31:18.963 回答
1

您在 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);
 }
于 2013-06-18T16:05:13.737 回答
0

请注意,您的操作不会companyCode直接返回。您将其分配给 Jsonresult属性,因此在您的成功功能中显示结果,您需要:

success: function (data) 
  {
     alert("Company: " + data.result);
  }

还有这个:E: Not Found告诉我你可能有一些路由问题。如果你在你的动作里面设置了一个断点ChangeCompany,它会被击中吗?

于 2013-06-18T17:23:13.997 回答