Javascript 如何在ajax中从php weeb页面返回响应并将其保存在变量中
如何在ajax中从网页返回响应并将其保存在变量中 这是我的密码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); };
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好的,我更改了它,但什么也没发生如果可能的话检查我的代码。谢谢我不是建议你改变什么。我是说你没有提供足够的上下文信息。但总的来说,我认为您应该看看这里提供的示例: