AJAX功能需要双击吗?

时间:2017-06-13 07:07:27

标签: javascript c# asp.net

出于某种原因,我必须单击两次才能激活/停用用户。显然我不想要它,只需点击一下即可。我在这里做错了什么?

(我猜这是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

1 个答案:

答案 0 :(得分:0)

您用来联系服务器的对象,XMLHttpRequest是Ajax概念的一部分。 Ajax代表异步JavaScript和XML。这意味着只要传递的URL请求得到解决,就会触发绑定到onreadystatechange的事件。如果readyStatestatus合适,您的window来电也将得到解决。

异步,整个浏览器不会停止,因为服务器尚未响应,整个程序将继续。您仍然可以按此按钮,但在响应请求之前不会发生任何事情。再次点击它会向您的服务器发送另一个请求,我假设该请求也已得到解决,但此时window上的呼叫已经发生。