我有一个ajax函数,每3秒执行一次,调用一个'file2.php'文件。我通过POST传递了一个变量$ lastid,在'file2.php'中使用它,然后在响应中我得到了一个新的最后一个id,直到下一次执行ajax函数时,我需要以$ lastid的形式发送。但是我找不到一种方法来更新实际上替代ajax调用中先前值的变量。
我尝试在ajax函数中将response.lastid分配给var lastid,但这无济于事。我一直都得到与上次通话相同的回复。
这是ajax函数,以及我最初如何设置变量
<script>
var lastid = <?php echo $lastid; ?>;
function nuevospedidos() {
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "file2.php", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var response = JSON.parse(this.responseText);
console.log(response);
var lastid = response.lastid;
}
};
xhttp.send("lastid=" + lastid);
}
setInterval(nuevospedidos, 3000);
</script>
我得到的响应是这个json对象
{lastid: "4074",
contenido: "some content",
originalid: "4073"}
我只希望收到一次响应,然后用json对象带来的lastid更新lastid变量,以便下次执行时知道是最后处理的ID。
答案 0 :(得分:0)
这是一个范围问题。 declared inside a function时,您的lastid
变量不是全局变量。
您必须将其声明为全局变量:
var lastid = <?php echo $lastid ?>;
function newId() {
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "file2.php", true);
xhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var response = JSON.parse(this.responseText);
lastid = response.lastid;
}
};
xhttp.send("lastid=" + encodeURIComponent(lastid));
}
setInterval(newId, 3000);
答案 1 :(得分:0)
您可以使用window对象来指定您正在访问全局变量
window.lastid = response.lastid;
如此处所述:How to reference a global scope variable into the local scope?