【问题标题】:Ajax success function returns empty dataAjax成功函数返回空数据
【发布时间】:2013-11-26 12:33:16
【问题描述】:

我正在尝试通过 ajax 浏览我的请求。

当用户通过身份验证时,它会转到 ajax 成功函数上的另一个 url -

success:function(data,result)
{
window.location.url='@Url.Action("Home","Index");
}

而我的控制器是-

 public void _LoginPartial(LoginModel login) {
            try {

                var system = (from u in db.RegisterLedgers
                              where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
                              select u).FirstOrDefault();
                if (system != null) {

                    Session["LoggedInUser"] = system;
                    FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
                }
            }
            catch (Exception ex) {
                ModelState.AddModelError("", ex);
            }
        }

Ajax 查询是-

<script type="text/javascript">
    $(function () {
        $('#Login-button').click(function () {
            $.ajax({
                url: '/loginledger/_loginpartial/',
                data: $('#form-loginpartial').serialize(),
                type: 'post',
                success: function (data, result) {
                    alert(result);
                    alert(data);
                },
                error: function () {
                    alert("Form couldn't be submitted");
                }

            });

        });

    });

</script>

显示ajax查询成功但数据为空。我在服务器端检查了这个请求,它从数据库中取出记录。

为什么我在 ajax 成功函数中得到空结果?我在这里做错了什么?

【问题讨论】:

    标签: c# jquery ajax asp.net-mvc-4


    【解决方案1】:

    我在这里做错了什么?

    您的控制器操作似乎没有返回任何内容。这只是一个void。在 ASP.NET MVC 控制器中,动作必须返回 ActionResults。

    例如,您可以使用 JsonResult

    public ActionResult _LoginPartial(LoginModel login) 
    {
        try 
        {
            var system = 
                (from u in db.RegisterLedgers
                where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
                select u).FirstOrDefault();
    
            if (system != null) 
            {
                Session["LoggedInUser"] = system;
                FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
                return Json(new { success = true; });
            }
        }
        catch (Exception ex) 
        {
            ModelState.AddModelError("", ex);
        }
    
        return Json(new { success = false; });
    }
    

    您可以检查您的 AJAX 成功回调:

    success: function (data) {
        alert(data.success);
    }
    

    【讨论】:

      【解决方案2】:

      您的 _LoginPartial 操作没有返回类型 (void)。您必须为_LoginPartial 操作设置返回类型,然后返回一些内容。例如return View()return Json()

      修改签名:

      public ActionResult _LoginPartial(LoginModel login)
      {
          // also a good idea to check `ModelState.IsValid`
          if (ModelState.IsValid)
          {
              // Go ahead and log them in if everything checks out, then return
              // your successful response
              return Json(new { status = 200, msg = "OK" });
          }
          // Erroneous response
          return Json(new { status = 401, msg = "Unauthorized" });
      }
      

      只是给出的例子;显然按照您认为合适的方式实现它。

      【讨论】:

        【解决方案3】:

        您的操作应该返回一些东西(推荐 JsonResult)。为此,请将返回类型 (void) 替换为 ActionResult 或 JsonResult,并在函数的末尾返回 Json() 类似的内容:

        public ActionResult_LoginPartial(LoginModel login) {
                try {
        
                    var system = (from u in db.RegisterLedgers
                                  where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
                                  select u).FirstOrDefault();
                    if (system != null) {
        
                        Session["LoggedInUser"] = system;
                        FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
        
                     return Json(data = result, message = "suceed" JsonRequestBehavior.AllowGet);
                    }
        
                  return Json(data=null, message = "system is null" JsonRequestBehavior.AllowGet);
                }
                catch (Exception ex) {
                    ModelState.AddModelError("", ex);
                    return Json(data=null, message = "exception" JsonRequestBehavior.AllowGet);
                }
            }
        

        【讨论】:

          猜你喜欢
          • 2013-03-10
          • 2015-06-29
          • 1970-01-01
          • 2014-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-12
          • 2015-09-11
          相关资源
          最近更新 更多