我尝试使用此功能通过PHP文件导入一些数据:
sendJsonRequest("initial", startID);
json = JSON.parse(request);
function sendJsonRequest(type, id) {
if (window.XMLHttpRequest) {
var xmlhttp = new XMLHttpRequest();
} else {
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
request = xmlhttp.responseText; //writing the response in an already defined variable
}
}
xmlhttp.open("GET","../RequestHandler.php?"+type+"_"+id,true);
xmlhttp.send();
}
数据导入效果很好。我现在的问题是我想在调用这个函数后立即使用我的请求,到目前为止它仍然不可用(我意识到这是因为onreadystatechange作为函数独立运行),因此我必须加入一些延迟直到就是这样。我发现使用setTimeout或setInterval非常不舒服,因为那些没有阻塞代码,我不得不重构一些代码非常糟糕和低效。这就是为什么我在寻找一种修改/阻止函数的方法,直到请求可用,但是建议不要使用空的while循环,也不建议等待/暂停/睡眠函数。任何人都可以找到另一种方法来实现这一目标吗?
答案 0 :(得分:1)
你能通过回调吗?
function sendJsonRequest(type, id, callback) {
if (window.XMLHttpRequest) {
var xmlhttp = new XMLHttpRequest();
} else {
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
request = xmlhttp.responseText; //writing the response in an already defined variable
if(callback) {
callback(request);
}
}
}
xmlhttp.open("GET","../RequestHandler.php?"+type+"_"+id,true);
xmlhttp.send();
}
并使用它:
sendJsonRequest("initial", startId, function(req) {
var json = JSON.parse(req);
});
答案 1 :(得分:0)
尝试使用a
Promise