AJAX / XMLHttpRequest之前的代码行未执行调用

时间:2018-06-18 16:50:06

标签: javascript html ajax xmlhttprequest

以下是我在Javascript中的代码:

document.getElementById("button").disabled = true;
document.getElementById("button").innerHTML = "Please Wait...";

var xhttp = new XMLHttpRequest();
xhttp.open("GET", "MoodInput"+ "?moodValue=" + input, false);
xhttp.send();

当我将表单提交给Servlet时,似乎首先执行xhttp.send()函数。但是,我希望首先执行以下两行:

document.getElementById("button").disabled = true;
document.getElementById("button").innerHTML = "Please Wait...";

我该怎么做才能解决问题?它必须是同步的,因为servlet中有一个thread.sleep方法,以便Arduino与串口连接并设置。

2 个答案:

答案 0 :(得分:1)

当JavaScript函数正在运行时,浏览器根本不会做很多事情,包括重新绘制DOM。

您的代码按照您想要的顺序运行,并且DOM正在更新,页面不会重新绘制您所做的更改。

  

它必须是同步的

不推荐使用同步XMLHttpRequests,因为它们会导致浏览器在等待响应时锁定。即因为它们会导致您遇到的问题。

  

因为servlet中有一个thread.sleep方法,以便Arduino与串口连接并设置。

使用同步或异步请求不会影响它。

您可能希望在收到回复之后运行您从问题中遗漏的其他一些

如果是这样,真正的解决方案是在请求完成后采取您想要做的任何事情,并将其移动到您指定为XHR对象的加载事件处理程序的函数。

答案 1 :(得分:-1)

button input type="button"innerHTML使用的文字不使用value

document.getElementById("button").value = "Please Wait...";

您使用的是输入还是按钮元素?