【问题标题】:AJAX Function Requires Double Click?AJAX 函数需要双击?
【发布时间】:2017-06-13 07:07:27
【问题描述】:

出于某种原因,我必须单击两次才能激活/停用用户。显然我不想那样,一键就够了。我在这里做错了什么?

(我猜是AJAX调用有问题)

C#:

var toggleUrl = "AdminListUsers.aspx?column=" + (IsClicked.FirstOrDefault().Key ?? "Name") + "&direc=" + (IsClicked.FirstOrDefault().Value) + "&a=chstat&q=" + id.ToString() + "&d=" + disabled + "&z=" + Server.UrlEncode(txtSearchFor.Text);

var hl = new HyperLink();
hl.Text = status;
hl.Style.Add(HtmlTextWriterStyle.Color, (disabled ? "red" : "green"));
hl.NavigateUrl = toggleUrl;
hl.Attributes.Add("onclick", "loadDoc();return true;"); //Calling the function here
cell.Controls.Add(hl);
tr.Cells.Add(cell);

cell = new TableCell();
cell.Width = new Unit("10%");

cell.Controls.Add(new LiteralControl("<nobr>"));

var linkbtn = new HyperLink
{
  NavigateUrl = toggleUrl,
  Width = 16,
  Height = 16,
  CssClass = disabled ? "user-status-disabled" : "user-status-enabled"
};
linkbtn.Attributes.Add("id", "aButton_" + id);
linkbtn.Attributes.Add("onclick", "loadDoc();return true;"); //Calling the function here
cell.Controls.Add(linkbtn);
cell.Controls.Add(new LiteralControl("&nbsp; "));

JavaScript:

function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      window.scrollTo(window.pageXOffset, window.pageYOffset);
      window.location.reload();
    }
  };
  xhttp.open("GET", "AdminListUsers.aspx?column=Disabled&direc=False&a=chstat&z=+", true);
  xhttp.send();
  $('.TellusAlternatingRowColor').load(document.URL + ' .TellusAlternatingRowColor');
}

Image for DataRows

【问题讨论】:

  • XMLHttpRequest 是异步的。您确定不是在您第一次点击后再次点击时才解决?
  • 你说得对。我必须刷新页面才能看到更新的数据!我希望它有一种方法可以自行完成......因为你我实际上是在对 DataTable 进行排序,所以如果我刷新整个页面,我不得不求助于它,我猜这并不是那么理想。
  • 我想我会回复这个帖子的。
  • 您是否检查过是否从该 onclick 事件中删除返回 true 只是尝试像 hl.Attributes.Add("onclick", "loadDoc();");并在 linkbtn.Attributes.Add("onclick", "loadDoc();");
  • @BibyAugustine 是的,我试过没有成功。

标签: javascript c# asp.net


【解决方案1】:

您用来联系服务器的对象XMLHttpRequest 是Ajax 概念的一部分。 Ajax 代表异步 JavaScript 和 XML。这意味着一旦来自 URL 的请求得到解析,与onreadystatechange 相关的事件就会被触发。如果readyStatestatus 合适,您的window 调用也将得到解决。

由于是异步的,整个浏览器不会因为服务器还没有响应而停止,整个程序会继续。因此,您仍然可以按下按钮,但在该请求得到响应之前不会发生任何事情。再次单击它会向您的服务器发送另一个请求,我假设该请求也已解决,但此时您对 window 的调用已经发生。

【讨论】:

  • 好吧我理论上明白了,但是我应该如何解决这个问题呢?我应该在发送 XMLHttpRequest 后尝试加载我想要的特定部分吗?
  • @andrekordasti 我假设您希望它重定向、登录,然后滚动?
  • 没错!正如代码所述。 "激活/停用用户 > 刷新您更新的用户 > 显示具有相同排序的新列表
  • 如果有帮助:查看我插入的图片。
  • 所以我们发送一个 AJAX 请求,然后$(document).load 触发,重定向用户,并终止 AJAX 请求。
猜你喜欢
  • 1970-01-01
  • 2016-03-01
  • 2015-11-18
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多