我想编写一个javascript应用程序,以便向我的服务器执行同步 AJAX请求。
服务器在localhost上运行,因此负面影响没有问题。
为什么要同步?
由于它的'return'语句,脚本完全同步很重要。
我目前的代码:
function request(command) {
var re = new XMLHttpRequest();
var object = "";
re.open("POST","http://localhost:5400", true);
re.send(command);
re.onreadystatechange = function() {
if (re.readyState == 4 && re.status == 200) {
object = re.responseText;
}
}
//That seems to be the problem
while (object == "") {}
return object
}
我知道使用while
并不是最好的方式而且它不起作用(不明白为什么)
您是否有想法或更好的解决方案,以使异步请求同步?
我不想使用jQuery来做到这一点
答案 0 :(得分:0)
要使请求同步,请将第三个参数更改为<a class="myLink" role="button" link="/client/workspace">
<i class="fa fa-laptop"></i> <span>Workspace</span>
</a>
为Template.yourTemplate.events({
'.myLink': function (event) {
event.preventDefault();
if (CONDITION) {
// your code to redirect to event.target.link
}
}
})
。像这样:
re.open
有关详情,请参阅此处:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests。如果你这样做,你将不需要while循环。
然而,这不是好习惯。 Asynchronicity是JavaScript的基石。它确保在您访问其他资源时网页不会冻结。
答案 1 :(得分:0)
由于@Douglas_Tyler_Gordon和@Stephen_S的评论,我找到了一个可以接受的解决方案:
function shell(command,callback) {
var re = new XMLHttpRequest();
re.open("POST","http://localhost:5400", true);
re.send(command);
re.onreadystatechange = function() {callback(re);}
}