【问题标题】:successful ajax call not returning to success function成功的ajax调用不返回成功函数
【发布时间】:2020-08-18 18:51:52
【问题描述】:

我正在开发一个 .NET Core MVC 应用程序,我在局部视图中添加了 JavaScript 代码,JavaScript 代码正在访问控制器的功能,但没有达到 Ajax 调用的成功功能。 下面是我的 JavaScript 代码,代码在页面加载时执行

<script type="text/javascript">
        $(document).ready(function () {
            debugger;
            $.ajax({
                type: 'GET',
                url: '@Url.Action("getMenurights","Home")',
                dataType: 'json',
                contentType: "application/json; charset=utf-8",
                success: OnSuccessMenuRights,
                failure: function (data) {
                    alert(data);
                }

            });
            
        });
    </script>

控制器代码:-

     public string getMenuRights()
     {
        string result = "";
        if (!string.IsNullOrEmpty(HttpContext.Session.GetString("UserId")as string))
        {

            Home objHome = new Home();
            DataTable dtMenuRights = new DataTable();
            dtMenuRights = objHome.GetMenuRights(HttpContext.Session.GetString("UserId").ToString());
            List<DataRow> MenuList = dtMenuRights.AsEnumerable().ToList();

            TempData["MenuRights"] = dtMenuRights;
            if (MenuList.Count > 0)
            {
                ViewBag.MenuList = MenuList;
            }
            TempData.Keep("MenuRights");
            //var x = TempData["MenuRights"];
            JsonSerializerSettings jss = 
            new JsonSerializerSettings { ReferenceLoopHandling =ReferenceLoopHandling.Ignore };
            result = JsonConvert.SerializeObject(dtMenuRights, Formatting.Indented, jss);
        
        }
        return result;
    }

【问题讨论】:

  • 也分享成功函数体。另外,首先尝试成功地直接编写一个函数,就像你写的错误一样。并检查响应数据中的内容。不要使用 alert ,而是使用 console.log
  • 你的状态码是什么?你得到什么 id 失败函数数据?
  • 你可能想要检查错误:error: function (jqXHR, textStatus, error) { errortext = error + jqXHR.responseText;警报(错误文本); }(而不是“失败:”)
  • 我在错误字符串中得到空值,状态也是 500 错误

标签: c# jquery ajax asp.net-core model-view-controller


【解决方案1】:

没有命中Ajax调用的成功函数

根据您的代码,我们可以发现您的操作方法getMenuRights()返回一个纯文本字符串给消费者,您可以将dataType选项修改为'text',如下所示。

$.ajax({
    type: 'GET',
    url: '@Url.Action("getMenurights","Home")',
    dataType: 'text',
    success: OnSuccessMenuRights,
    failure: function (data) {
        alert(data);
    }

});

此外,要解决与 Ajax 请求相关的问题,您可以尝试检查您在浏览器 F12 开发人员工具“网络”选项卡中发出的该 ajax 请求的响应。并检查您发出的请求(http 400 错误)或服务器端(http 500 错误)等是否有问题。

【讨论】:

  • internal server error 500 表示服务器遇到了意外情况。您可以调试代码以检查您的操作方法getMenuRights 中是否发生任何异常。
【解决方案2】:

试试这些

  1. 如果用户没有会话,则返回空字符串。从 1.9 开始,jQuery 拒绝空响应。响应应该是null{},而不是空字符串。它还拒绝格式错误的JSON,但在这种情况下不太可能,因为您正在使用库来生成JSON

  2. 这可能是因为您的返回类型是string,因此Content-Type 标头变为text/plain。尝试使用其中之一

  • 在您的jQuery 呼叫中使用dataType: 'text json'。这将告诉 jQuery 将文本视为JSON
  • 或使用 JsonResult 作为返回类型,从 MVC 控制器返回 JSON 而不是 string。这应该会导致 Content-Type 标头设置为 application/json

这是详细的规范(请参阅dataType

https://api.jquery.com/Jquery.ajax/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    相关资源
    最近更新 更多