【问题标题】:Getting no response from Fetch API ( in React native with Laravel API )没有从 Fetch API 得到响应(在带有 Laravel API 的 React Native 中)
【发布时间】:2017-10-18 08:57:35
【问题描述】:

我正在使用 React native 0.44 、Fetch API 和 Laravel 5.3 API。

当我尝试使用 Fetch API 获取 URL 时,它没有提供任何输出或响应。

由于localhost:8000 在 Fetch API 中不起作用,我尝试使用 wifi ipaddress。

    doSignUp() {

     console.log("inside post api");
     fetch('http://192.168.43.244:8000/api/user?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjE0NywiaXNzIjoiaHR0cDpcL1wvbG9jYWxob3N0OjgwMDBcL2FwaVwvYXV0aGVudGljYXRlIiwiaWF0IjoxNDk2MjA0ODgwLCJleHAiOjE0OTYyMDg0ODAsIm5iZiI6MTQ5NjIwNDg4MCwianRpIjoiRGdtSDNSWXl4MEtUZWs2YSJ9.yc0FvK5uJz8rzDWAZLwweDMrz6ljTWkTzvxgtCjEqAc', {
           method: 'GET',
            headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
  },
      }).then((response) => response.json())
        .then((responseJSON) => console.log("inside responsejson"))
        .catch(e=>console.error(e))
        .done();
     }

【问题讨论】:

    标签: laravel reactjs react-native laravel-5.3 fetch-api


    【解决方案1】:

    通过尝试检查状态是否正常,

    fetch('http://192.168.43.244:8000/api/user?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjE0NywiaXNzIjoiaHR0cDpcL1wvbG9jYWxob3N0OjgwMDBcL2FwaVwvYXV0aGVudGljYXRlIiwiaWF0IjoxNDk2MjA0ODgwLCJleHAiOjE0OTYyMDg0ODAsIm5iZiI6MTQ5NjIwNDg4MCwianRpIjoiRGdtSDNSWXl4MEtUZWs2YSJ9.yc0FvK5uJz8rzDWAZLwweDMrz6ljTWkTzvxgtCjEqAc', {
    method: 'GET',
                headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
      }}).(res => {
     if (res.status === 'OK') {
       console.log('I should be getting the data')
       return res.json() 
     }
    }).then(res => console.log(res))
    

    【讨论】:

    • sry 什么都没发生 :(
    • 你确定你的doSignUp() 函数被触发了吗?
    • 是的,我确定 cz 我可以在控制台中看到 inside post api
    【解决方案2】:

    我遇到了同样的问题,我使用 npm es6-promise 和 isomorphic-fetch 包解决了它。试试看

     import fetch from 'isomorphic-fetch';
    require('es6-promise').polyfill();
    

    你可以像这样使用它

    fetch('/holidays/occasion', {
              credentials: 'same-origin',
              method: 'POST',
              headers: {
                'Content-Type': 'application/json'
              },
              body: JSON.stringify({
               state: evt.target.value
             })
            });
          },
    

    【讨论】:

    • 使用上述软件包 -> 出现错误:fetch(...).then(...).then(...).catch(...).done is not a function
    • 另外,我如何使用你声明的获取变量
    • 顺便说一句,它仍然无法识别然后在这个包中使用
    • 你必须像在我的项目中一样在你的包中安装 isomorphic-fetch 和 es6-promise 我已经使用 npm install es6-promise 安装它们,然后导入该依赖项
    【解决方案3】:

    Fetch 是一个低级库,如果您想保持理智,不推荐使用它。事实上,fetch 只会在遇到网络错误时拒绝一个承诺。所有其他 http 错误将进入您检查 if (response.ok) 的 then 块中@

    对于我的 react-native 项目,我正在使用这个包 axios

    此外,请注意,如果您在 iOS react-native 项目中,除 localhost 之外的任何地址都将被拒绝,并且可能会静默失败,因为除了 https 之外的所有通信都不允许,因为 App Transport Security。我相信这就是你所面临的

    【讨论】:

      【解决方案4】:

      你为什么使用方法 Get,Header 类型的 AJAX 请求。你可以使用 react 官方文档中解释的简单 fetch。react-native fetch api

      【讨论】:

        【解决方案5】:

        通过使用生产服务器 url 解决它。

        问题是获取 api 并且 axios 无法访问 localhost 。

        【讨论】:

          【解决方案6】:

          运行命令 adb reverse tcp:8000 tcp:8000 并重新加载应用程序。

          【讨论】:

          • 试过你的方法Authorization:'Bearer token` ..还是没有:(
          • 你能试着只安慰响应(不是 response.json())并检查你是否能看到任何东西
          • 你能不能尝试获取这个 url facebook.github.io/react-native/movies.json 只是为了检查 url 是否有任何问题
          • 它返回了对象......也许你 r ryt......那么问题是什么?
          • 你能用邮递员点击你的网址并检查你是否能看到回复
          【解决方案7】:

          尝试在您的获取选项中添加键值对credentials: 'include'。 RN 0.44 引入了 withCredentials XHR 标志,如您所见here

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-08
            • 1970-01-01
            • 2017-12-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-05
            • 1970-01-01
            相关资源
            最近更新 更多