Javascript 在第二个提取请求中使用提取响应
我有一个带有两个获取请求的函数。第一个获取请求返回一个包含ACCTNO的对象数组。我正在尝试使用返回的ACCTNO是第二个请求。然而,我没有取得任何成功。我还试图引用this.state.buildUrl,因为我需要在视图中呈现buildUrl,但我得到的错误是this.setState不是函数或未定义。如何在第二个请求中使用第一个获取响应Javascript 在第二个提取请求中使用提取响应,javascript,reactjs,react-native,fetch,Javascript,Reactjs,React Native,Fetch,我有一个带有两个获取请求的函数。第一个获取请求返回一个包含ACCTNO的对象数组。我正在尝试使用返回的ACCTNO是第二个请求。然而,我没有取得任何成功。我还试图引用this.state.buildUrl,因为我需要在视图中呈现buildUrl,但我得到的错误是this.setState不是函数或未定义。如何在第二个请求中使用第一个获取响应 componentDidMount() { var url = 'http://10.0.2.2:8080/combined'; var
componentDidMount() {
var url = 'http://10.0.2.2:8080/combined';
var result = fetch(url, {
method: 'get',
}).then(function(response) {
return response.json();
}).then(function(data) {
var ACCTNO = data[0].ACCOUNT;
var FormData = require('form-data');
var form = new FormData();
form.append('businessId', '123456');
form.append('login', 'SAFConnectUser');
form.append('password', '123445678');
form.append('billingAccountNumber', ACCTNO);
form.append('signOffURL', 'fd');
form.append('timeOutURL', 'fd');
fetch('https://collectpay-uat.princetonecom.com/otp/namevaluepair/submitSingleSignOn.do', {
method: 'POST',
body: form
}).then((response) => response.text()).then((res) => {
if (res.error) {
console.log(res.error)
}
console.log(res)
var fields = res.split('|');
var getUrl = fields[3];
var buildUrl = getUrl.slice(14)
// Getting error that setState is not a function?
this.setState({buildUrl})
console.log(buildUrl)
console.log(ACCTNO)
})
})
}
render() {
return (
<WebView
source={{uri: this.state.buildUrl}}
style={{marginTop: 20}}
/>
);
}
}
export default acidirect;
您可以将第一次进入状态时的响应设置为
fetch('/url',{credentials: 'same-origin'}).then(function(response) {
return response.json();
}).then(this.setSomeState);
现在设定你的状态
setSomeState: function(response) {
this.setState({
array: response
});
},
现在你可以在任何地方使用它
this.state.array
将所有函数更改为胖箭头函数,以便它们可以引用:
我看到两个请求。你指的是哪一个?你似乎做得对。我认为问题可能是您的数据数组是空的。为什么不尝试打印数据并查看其外观?请正确缩进代码以使其更具可读性。我收到一个错误:更新由以下管理的视图的属性“source”时出错:rtcWebView暂时删除WebView。只要集中精力,您就可以使用第一次获取的数据进行第二次获取,并且可以在第二次获取完成后设置状态;因为那里还没有。呈现一个{this.state.buildUrl}以便您可以看到该状态。还要尝试console.log这个部分var buildUrl=getUrl.slice14;如果您甚至获得了buildUrl的值:
class acidirect {
componentDidMount() {
fetch('http://10.0.2.2:8080/combined', {
method: 'get',
})
.then(response => response.json())
.then(data => {
var ACCTNO = data[0].ACCOUNT;
var FormData = require('form-data');
var form = new FormData();
form.append('businessId', '123456');
form.append('login', 'SAFConnectUser');
form.append('password', '123445678');
form.append('billingAccountNumber', ACCTNO);
form.append('signOffURL', 'fd');
form.append('timeOutURL', 'fd');
fetch('https://collectpay-uat.princetonecom.com/otp/namevaluepair/submitSingleSignOn.do', {
method: 'POST',
body: form
})
.then(response => response.text())
.then(res => {
var fields = res.split('|');
var getUrl = fields[3];
var buildUrl = getUrl.slice(14);
this.setState({buildUrl});
});
});
}
render() {
return (
<WebView
source={{uri: this.state.buildUrl}}
style={{marginTop: 20}}
/>
);
}
}
export default acidirect;