Javascript 获取fetch之外的变量
我有一个登录功能,我想显示一个警报,这取决于登录是成功还是错误。首先,我声明变量,然后根据结果获取变量的值 抓取完成后,根据这个值,我想显示警报。 我的问题是,在获取之后,该值是未定义的 这是我的密码Javascript 获取fetch之外的变量,javascript,reactjs,Javascript,Reactjs,我有一个登录功能,我想显示一个警报,这取决于登录是成功还是错误。首先,我声明变量,然后根据结果获取变量的值 抓取完成后,根据这个值,我想显示警报。 我的问题是,在获取之后,该值是未定义的 这是我的密码 onLogin(){ var a; fetch('http://xxxxx/user/login', { method: 'POST', headers: {'Content-Type': 'application/json'},
onLogin(){
var a;
fetch('http://xxxxx/user/login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
username: this.username,
password: this.password
})
})
.then(function(response){
if (response.status === 404){
response.text().then(function(object){
var a = "NO";
})
} else if (response.status === 200){
response.text().then(function(object){
var a = "OK";
})}
})
if (a == "OK"){
Alert.alert(
'Acceso',
'a',
[{
text: 'Aceptar',
onPress: (this.aceptar.bind(this))
},
{
text: 'Cancelar',
onPress: (this.cancelar.bind(this))
}]
)}
else if (a == "NO"{
//something
}
}
在将值分配给时,基本上是重新定义它,而不是分配值。
删除then()中的var关键字,它应该可以工作 您正在重新声明变量a
onLogin(){
var a; **Here you have declared the variable**
fetch('http://xxxxx/user/login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
username: this.username,
password: this.password
})
})
.then(function(response){
if (response.status === 404){
response.text().then(function(object){
//Here you are redeclaring it. just remove var
a = "NO";
})
} else if (response.status === 200){
response.text().then(function(object){
//Here too
a = "OK";
})}
})
if (a == "OK"){
Alert.alert(
'Acceso',
'a',
[{
text: 'Aceptar',
onPress: (this.aceptar.bind(this))
},
{
text: 'Cancelar',
onPress: (this.cancelar.bind(this))
}]
)}
else if (a == "NO"{
//something
}
}
你有两个问题
a
(删除中的关键字var
。然后()
函数将在函数级别声明它)fetch
是异步的,因此不能保证在调用其值时定义a
onLogin
函数中(并且从一开始就不需要var A
)
例如:
onLogin(callback) {
fetch('http://xxxxx/user/login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
username: this.username,
password: this.password
})
})
.then(function(response) {
var successful = true;
if (response.status === 200) {
callback(successful);
} else {
callback(!successful);
}
});
};
onLogin(function (successful) { // call the onLogin and pass in a function as a callback
if (successful){
Alert.alert(
'Acceso',
'a',
[{
text: 'Aceptar',
onPress: (this.aceptar.bind(this))
},
{
text: 'Cancelar',
onPress: (this.cancelar.bind(this))
}]
);
} else {
// not successful, do something else
}
});
fetch是异步的。在收到fetch调用的响应之前,您正在显示警报。取决于fetch结果的代码应该是
的一部分。然后在fetch结束时显示。