Как сказал @umeli, это проблема времени.Вы вызываете getRespParty (), но как только вызывается XMLHttpRequest, код продолжается, выходит из функции и выполняет передачу до завершения вызова Ajax.
Одно решение, которое IMHO является более элегантным, будетиспользовать обратный вызов из getRespParty () и вызывать его там:
document.getElementById("Status").value = "Submitted for RFP";
getRespParty('ResponsibleParty', function() { document.forms[0].submit() });
Затем вы изменяете getRespParty ():
function getRespParty(x, callback) {
var noEmployees = document.getElementById('NoEmployees').value;
var stateName = document.getElementById('State').value
var url = 'http://' + window.location.host +
'/ebsprospects.nsf/(GetResponsiblePerson)?OpenAgent&NoEmployees=' +
noEmployees + '&State=' + stateName;
var xhttp = new XMLHttpRequest();
xhttp.open("GET", url);
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById(x).value = xhttp.responseText;
if (callback != null && typeof callback === "function") {
callback();
}
}
};
xhttp.send();
}
Чтобы еще больше улучшить, вы можете вызвать обратный вызовФункция с различными аргументами, в зависимости от того, успешен XMLHttpRequest или нет:
if (this.readyState == 4) {
if(this.status == 200) {
document.getElementById(x).value = xhttp.responseText;
if (callback != null && typeof callback === "function") {
callback(true);
}
} else {
if (callback != null && typeof callback === "function") {
callback(true, this.status);
}
}
}
Теперь вы можете читать это значение и выполнять различные действия в своей основной функции обратного вызова:
document.getElementById("Status").value = "Submitted for RFP";
getRespParty('ResponsibleParty', function(success, statusCode) {
if (success) {
document.forms[0].submit();
} else {
alert("Ajax call failed with status "+statusCode);
}
});
ЛюбойКогда вы выполняете асинхронные вызовы, вы должны использовать обратные вызовы, если вы планируете впоследствии выполнять действия в вызывающей функции.