【问题标题】:Response from HTTP with GET method with params using axios in React Native在 React Native 中使用带有参数的 GET 方法从 HTTP 响应使用 axios
【发布时间】:2017-05-11 21:08:58
【问题描述】:

我认为这可能是一个非常简单的问题,但我是网络请求的新手,可以让它工作,也不能在网络上得到简单的响应

我有一个站点,我可以通过将这个 URL 放入浏览器来获得 JSON 响应:http://www.test.com/callservice.php?action=stop&x=1&y=2&ct=100

这反过来又给了我一些 JSON 响应。

现在,我正在尝试使用 Axios 在 Javascript 中获得相同的效果。

直接使用网址

 componentWillMount() {
    axios.get('http://www.test.com/callservice.php?action=stop&x=1&y=2&ct=100')
      .then(response => console.log(response));
  }

或者通过使用 GET 参数:

 componentWillMount() {
    axios.get('http://www.test.com/callservice.php', {
      params: {
        action: 'stop',
        x: 1,
        y: 2,
        ct=100
      }
    })
      .then(response => console.log(response));
  }

但是两种方法都会给出相同的错误:

Possible Unhandled Promise Rejection (id: 0):
Network Error
Error: Network Error

还有一个更详细的捕获错误:

Error: Network Error
    at createError (createError.js:15)
    at XMLHttpRequest.handleError (xhr.js:87)
    at XMLHttpRequest.dispatchEvent (event-target.js:172)
    at XMLHttpRequest.setReadyState (XMLHttpRequest.js:542)
    at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:378)
    at XMLHttpRequest.js:482
    at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
    at MessageQueue.__callFunction (MessageQueue.js:236)
    at MessageQueue.js:108
    at guard (MessageQueue.js:46)

【问题讨论】:

  • 尝试添加一个catch子句来查看错误:axios.get('testsite.com/pl/ite/…).then(response => console.log(response)).catch(e => console.log( e));
  • @DiogoSgrillo 我这样做了,并在问题中添加了完整的错误,但我仍然无法理解问题所在。
  • 官方文档格式响应不同。你可以试试这个格式吗? .then(function (response) { console.log(response); })
  • @SergChernata 你能澄清一下我该怎么做吗?
  • 另外,我已经更改为真实的 URL,以防它有助于调试。

标签: javascript json react-native httprequest axios


【解决方案1】:

这似乎是一个CORS 问题。

如果您是脚本的所有者(在服务器上),您可以添加适当的响应标头来处理此问题。在 PHP 中会是这样的:

<?php header("Access-Control-Allow-Origin: *");

出于测试目的(或者如果您无权访问服务器),您可以安装chrome extension 以禁用跨域限制。

【讨论】:

  • 但是,当我在浏览器(Chrome 或我尝试过的任何其他浏览器)中请求 URL 时,它可以工作,它在 Javascript/React Native 中不起作用
  • 大多数浏览器在处理 Ajax 请求时都有安全限制。您可以使用我建议的插件在 Chrome 中禁用这些限制。
【解决方案2】:

jbssm, 看来您正在使用 IOS。你能在 Xcode 的项目设置中检查你的应用传输安全设置吗?

Xcode 默认禁用 http 连接,只允许安全连接。 您应该在项目设置中添加“允许任意负载”

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 2022-01-10
    • 2019-04-07
    • 2018-07-01
    • 2017-11-22
    • 2020-07-29
    • 2020-05-21
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多