【问题标题】:Javascript dependent upon ajax resultJavascript 依赖于 ajax 结果
【发布时间】:2012-12-13 16:19:02
【问题描述】:

我在页面上有一个日历的约会表。该表是所有尚未批准的任命。

管理员需要在安排会议之前批准会议,因此表格中有一个“批准”链接。单击“Approve”会调用一个 ajax 方法,该方法会将约会的“approved”字段设置为 true。然后 js 删除该行并重建表,这样不需要全页刷新就可以看到约会不再在表中。

我的问题是ajax方法只有在当时还没有预约的情况下才会批准预约。如果存在冲突,则约会应保持未经批准(x.approved = false)。

这很好用,但是 ajax 方法只是将 RedirectToAction 返回到带有表格的页面,然后 javascript 继续删除该行。页面刷新后,该行返回,因为约会仍未获批准。

有没有办法返回一个 RedirectToAction 并返回一个布尔值?是否可以更改 javascript 变量(即 wasApproved),以便行删除 javascript 仅在(wasApproved == true)时运行?我认为现在不是使用 ajax 的成功函数的合适时机,因为 ajax 方法应该总是成功运行。

【问题讨论】:

  • 白兰度,你在用asp.net mvc吗?
  • 是的,对不起。并感谢代码标记。忘了这样做
  • 我真的不明白您为什么要使用 javascript 删除该行。如果您要从操作中返回完整的表格,那么应该是删除或不删除行的表格?
  • 当我不通过 javascript 删除该行时,它只会将已批准的字段设置为 true,但只会在整页刷新后从表中消失。我的重定向实际上应该刷新整个页面。它是否有可能使用表的缓存数据而不是实际刷新整个页面?

标签: c# javascript ajax


【解决方案1】:

试试这样的:

在您的控制器上,提供 Json 结果。

[HttpPost]
public ActionResult Aprove(int id) 
{
    /* process database changes*/
    return Json(new { success = true}, JsonRequestBehavior.AllowGet);
}

在客户端只需使用 jquery 访问并将此结果作为 json 对象读取。您可以根据需要删除该行或将重定向更改为其他 url。比如:

$(document).ready(function() {  
    $("a.aprove").click(function() {
        var id = /* provide an id to pass as a parameter.. could be on the 'rel' property of a tag. */
        $.ajax({
          type: 'POST',
          url: "Controller/Aprove",
          data: { id : id },
          success: function (data) {
                if (data.success) 
                {
                                    // remove the tr row...
                    $(this).closest("tr").remove(); 
                                    // or reload the page with 
                                    // document.location.reload(true);
                }           
          },
          dataType: 'json'
        });         
    });
);

【讨论】:

  • 实际上,在我看到你的答案之前,我才刚刚尝试这条路线。我认为这将最终成为要走的路。
  • 如果要刷新页面,请尝试document.location.read(true)javascript statment。
  • 所以我几乎复制了你的 javascript 并且它不起作用所以我认为它是我的控制器。我有一个 if 语句说如果没有冲突,app.approved = true;return Json(new { success = true, appId }, JsonRequestBehavior.AllowGet); 那么我的 else 只是返回成功 = false 的 Json。为什么那行不通?
  • 你返回的是一个 json 对象吗?
  • 另一件事:它不会让我只使用这两个返回语句进行编译,因为它说并非所有代码路径都返回一个值。即使它不是 else if。所以我用success = false 放了另一个return 语句,我想这可能是问题所在。但我认为如果没有冲突,它应该进入 if 语句,然后返回 success = true。那么它甚至不会评估该方法的其余部分,对吧?
猜你喜欢
  • 2011-01-05
  • 2019-08-11
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
相关资源
最近更新 更多