为AJAX JSON $ .post添加成功

时间:2014-06-23 17:47:02

标签: jquery ajax json

我是JSON的新手,我正在尝试在我的JQuery AJAX帖子上添加成功回调。成功只需location.reload()

现在我的post在更新我的数据库方面工作正常,但是重新加载位于我的AJAX方法之外,它在控制器实际处理数据之前发生了一瞬间意味着自动调用重新加载发生之前数据准备好了。我希望重新加载等到AJAX完成它的工作。

发布

$.post(
      '/Users/customCreate',
      {
           'name': name,
           'birthday': birthday,
           'bio': bio
      },
            function (data) { },
            "json"
       );
       location.reload(); //Want this in the success function

控制器

[HttpPost]
    public ActionResult customCreate(string name, string birthday, string bio)
    {
        DateTime dt;
        if (name == null || birthday == null || bio == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        try
        {
            dt = Convert.ToDateTime(birthday);
        }
        catch
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        if (ModelState.IsValid)
        {
            try
            {
                User user = new User();

                user.name = name;
                user.birthday = dt;
                user.bio = bio;  

                db.Users.Add(user);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            catch (ArgumentOutOfRangeException)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
        }
        return RedirectToAction("Index");
    }

任何帮助都会非常感激,因为我只使用了JSON / AJAX。

4 个答案:

答案 0 :(得分:3)

您可能希望在.reload()的调用中包含the forcedReload flag,以确保您不会在数据库更新之前获取浏览器的页面缓存版本:

$.post('/Users/customCreate', {
    'name': name,
    'birthday': birthday,
    'bio': bio
}).done(function afterUserCreate(data) {
    location.reload(true);
});

(我还希望在.done()之后链接$.post()方法,并命名我的所有功能,以增加可读性和故障排除。)

答案 1 :(得分:0)

这很简单:)

$.post(
      '/Users/customCreate',
      {
           'name': name,
           'birthday': birthday,
           'bio': bio
      },
            function (data) {location.reload();} //Now it's in the success function
       );

答案 2 :(得分:0)

您需要在回调函数中编写后处理代码

$.post(
      '/Users/customCreate',
      {
           'name': name,
           'birthday': birthday,
           'bio': bio
      },
            function (data) { location.reload();}

       );

或者,您可以使用完成相同操作的$.ajax函数。它更加冗长可读。

$.ajax({
    type: "POST",
    url: '/Users/customCreate',
    data: {
        'name': name,
        'birthday': birthday,
        'bio': bio
    },
    success: function (data) {
        location.reload();
    },
});

答案 3 :(得分:0)

只需将重新加载放入成功回调中,如下所示:

$.post(
      '/Users/customCreate',
      {
           'name': name,
           'birthday': birthday,
           'bio': bio
      },
            function (data) { location.reload(); }
      });