使用先前的ajax响应中的值更新发送到ajax调用的变量

时间:2019-07-15 15:44:11

标签: javascript php ajax

我有一个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。

2 个答案:

答案 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?