【问题标题】:Making an AJAX request to an MVC controller and getting the data from the response in js向 MVC 控制器发出 AJAX 请求并从 js 中的响应中获取数据
【发布时间】:2016-01-19 19:16:35
【问题描述】:

单击按钮时,我正在尝试将用户在文本框中输入的产品名称值发送到服务器进行修改,然后使用 AJAX 返回页面。我正在进入控制器中的 ChangeName 方法,但没有进入我的成功函数来提醒新名称。

JS:

    $("#changeNameButton").click(function () {
        var productName = $("#Name").val();

        $.ajax({
            url: '/Products/ChangeName/',
            type: 'POST',
            dataType: 'JSON',
            data: {name: productName},
            success: successFunc
        });
    });


    function successFunc(data) {
        alert(data);
    }

控制器:

    public string ChangeName(string name)
    {
        string changedName = ChangeNameHelper(name);
        return changedName;
    }

如果有人可以就在 MVC5/6 中对控制器进行异步调用的正确方法提出建议,那就太好了。

我的主要问题是我永远不会在响应时进入successFunc()。

【问题讨论】:

  • 您可能想要return name; 而不是return ChangeName(name),因为您正在进行反复调用。
  • 看起来ChangeName函数只是调用自己,这会导致无限循环。它永远不会成功,因为服务器永远不会向客户端返回响应。
  • @remdevtec 我现在将新更改的名称设置为一个变量,然后尝试返回它,但警报仍然没有发生。你能只将一个字符串返回给 AJAX 吗?还是我必须返回 JsonResult 或 ActionResult?
  • @BlakeRivell 看起来它正在做同样的事情。通过调用ChangeName(name) 作为第一行,您将继续无限调用ChangeName 函数。你要么需要调用另一个函数(做一些工作),要么只需要return name;
  • 我很抱歉!在我的实际代码中,ChangeName 是一个具有不同名称的辅助函数。现在看看我更新的代码。

标签: javascript jquery asp.net ajax asp.net-mvc


【解决方案1】:

关于您的评论,如果您只返回一个字符串,MVC 会将其转换为 json。

现在,在您更新的代码中,您仍然在其内部调用一个方法。请致电string changedName = ChangeNameForResult(name); 或任何其他名称的函数。

【讨论】:

  • 我认为我的问题是我从来没有进入我的成功功能。不知道可能出了什么问题。我在控制器的调试器中看到它返回更改后的名称字符串。
【解决方案2】:

通过 nuget 包管理器安装 Newtonsoft.Json 并在您的控制器中执行此操作

Public ActionResult ChangeName(string name)
{
     // get your object you want to serialize let's say res
     return JsonConvert.SerializeObject(res);

}

【讨论】:

  • 我认为你让我走在了正确的轨道上,但在这种情况下我不是在处理对象。只是一个我想返回的简单字符串。 res 可以是字符串吗? Intellisense 说不。
  • 返回内容(YourString, "application/json");
  • 仍然无法提醒响应。我在网络选项卡中得到 200OK,这很奇怪。
  • 您是否更改了返回 ActionResult 而不是字符串的操作??
  • 是的,但仍然没有进入成功功能提醒数据结果。顺便说一句,这是使用 jQuery AJAX 时需要的东西吗?
【解决方案3】:

我需要设置 dataType: 'text' 而不是 JSON,因为我返回的是一个简单的字符串。

dataType 是返回的数据类型,contentType 是发送的数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多