Javascript 如何在ajax中从php weeb页面返回响应并将其保存在变量中

Javascript 如何在ajax中从php weeb页面返回响应并将其保存在变量中,javascript,Javascript,如何在ajax中从网页返回响应并将其保存在变量中 这是我的密码 let state function ajax(url) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.onload = function() { resolve(this.responseText); };

如何在ajax中从网页返回响应并将其保存在变量中

这是我的密码

      let state
function ajax(url) {
    return new Promise(function(resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.onload = function() {
            resolve(this.responseText);
        };
        xhr.onerror = reject;
        xhr.open('GET', url);
        xhr.send();
    });
}
ajax("./code.php")
    .then(function(result) {
        state=result;
    })
    .catch(function() {
    });
console.log(state)
状态未定义
为什么?

在代码的最后一行未定义state
,因为ajax函数返回一个承诺,即。这意味着将在
state=result
之前调用
console.log(state)
。您可以通过在
承诺中添加console.log('state updated')来检查这一点。然后,
回调

ajax("./code.php")
    .then(function(result) {
        state=result;
        console.log(state);
});
为了获得
状态的更新值并能够使用它,一种方法是在请求成功时调用回调:

ajax(“./code.php”)
.然后(函数(结果){
状态=结果;
onCodeSuccess()
})
.catch(函数(){
});
函数onCodeSuccess(){
console.log(状态)
}
AJAX代表异步Javascript和XML;这意味着请求不会停止代码执行,并且在返回响应之前很久就会执行
console.log
。您只能在
然后
回调中访问变量结果

ajax("./code.php")
    .then(function(result) {
        state=result;
        console.log(state);
});

首先,您需要了解javascript上的异步过程是如何进行的

当您的js代码通过浏览器运行时,它开始执行自下而上的行。但是如果有一个异步进程,它将在进程完成时执行


让我们陈述;//立即执行
ajax(…)
.然后(res=>state=res);//在从服务器获得响应时执行代码
console.log(状态);//立即执行。状态已声明,但尚未定义。它将在请求完成时定义
您需要在
中移动逻辑,然后在
回调中使用异步函数

但若您坚持要发出同步http请求,XmlHttpRequest的
open
方法将布尔值作为第三个参数,即将进程的类型更改为async to sync

xhr.open('GET',url,false);//假平均发送同步请求
xhr.send();
然后您可以使用responseText获得响应

console.log(xhr.responseText);//不需要承诺

但是这种方法是非常糟糕的做法,它会阻止代码的其余部分执行,直到请求完成

您似乎缺少一些上下文。你有
状态
这个状态
这个
在您的console.log中指的是什么?@jmargolisvt好的,我更改了它,但什么也没发生如果可能的话检查我的代码。谢谢我不是建议你改变什么。我是说你没有提供足够的上下文信息。但总的来说,我认为您应该看看这里提供的示例: