我使用外部托管的Django python框架创建了一个API端点。我可以从浏览器(mydomain.com/endpoint/
)访问我的端点并验证没有错误。当我在我的开发机器(localhost:8000/endpoint/
)上本地运行我的测试django服务器时也是如此。当我使用localhost作为端点时,我的json数据没有问题。当我使用我的生产域时,axios会遇到网络错误,并且没有太多的上下文...从调试控制台我得到了这个:
Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:87)
at XMLHttpRequest.dispatchEvent (event-target.js:172)
at XMLHttpRequest.setReadyState (XMLHttpRequest.js:554)
at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:387)
at XMLHttpRequest.js:493
at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
at MessageQueue.__callFunction (MessageQueue.js:353)
at MessageQueue.js:118
at MessageQueue.__guardSafe (MessageQueue.js:316)
这是我的反应本机组件中的axios调用:
componentDidMount() {
axios.get('mydomain.com/get/').then(response => { // localhost:8000/get works
this.setState({foo:response.data});
}).catch(error => {
console.log(error);
});
}
答案 0 :(得分:3)
添加 http://
答案 1 :(得分:2)
似乎默认情况下iOS中未加密的网络请求被阻止,即https
将起作用,http
则不会。
默认情况下,iOS会阻止任何未使用SSL加密的请求。 如果您需要从明文URL(以http开头的URL)获取 您首先需要添加App Transport Security例外。
答案 2 :(得分:2)
如果您在其他帖子中没有找到答案
就我而言,我使用 Rails 作为后端,并尝试使用 Axios 向 http://localhost:3000
发出请求,但每次都收到 Network Error
作为响应。然后我发现在android模拟器的情况下我需要向http://10.0.2.2:3000
发出请求。对于 iOS 模拟器,它适用于 http://localhost:3000
。
使用
http://10.0.2.2:3000
代替
http://localhost:3000
答案 3 :(得分:0)
我面临着同样的问题。
我看起来更深,我的
端点
url
不正确。
通过为axios
提供正确的确切网址,我的api就像魅力一样。
希望它可能对任何人都有帮助
答案 4 :(得分:0)
对我来说,问题是因为我的远程URL不正确。 如果您的网址是.env文件,请交叉检查命名并确保 如果以其他方式命名,则以REACT_APP_为前缀的React可能找不到它。
在.env文件中,类似REACT_APP_BACKEND_API_URL = https://appurl/api 可以以const {REACT_APP_BACKEND_API_URL} = process.env进行访问;
答案 5 :(得分:0)
尝试 “ Content-Type”:“ application / x-www-form-urlencoded”, 接受:“ application / json”
答案 6 :(得分:0)
确保将 localhost
更改为 your_ip_address
,您可以通过在命令提示符中键入 ipconfig
来找到该值
尝试添加到您的 AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 7 :(得分:-1)
解决方案是: 在Android上,您需要使用file://作为前缀指定文件路径。所以这样做:
const audio = {
uri: 'file://' + this.recorder.fsPath,
type: 'video/mp4',
name: filename
}