为什么提取返回302状态代码但XHR不是?

时间:2017-01-27 15:19:35

标签: javascript wordpress ecmascript-6 fetch es6-promise

我使用fetch查询自己的WordPress REST API端点。但是,我使用fetch进行的每个请求都会以302状态代码的无限循环结束,直到最后使用TOO_MANY_REDIRECTS获取错误。

illustration of problem

这是在Chrome 56上,使用本机提取。但是当我使用浏览器访问端点时,使用XHR或Postman,我总是获得200作为状态。

另一方面,XHR ......

XHR doesn't suffer from this problem

与此问题相关的代码:

  static checkStatus(email = null) {
    const cookie = Cookies.get('cookiename');
    const data = email || cookie;

    if (!cookie && !email) {
      return Promise.reject(new Error('No data given.'));
    }

    // This works.
    return new Promise((resolve, reject) => {
      request({
        url: `/wp-json/woo/donate/status/?email=${data}`,
        method: 'GET',
        success: (response) => {
          resolve(response);
        },
        error: (error) => {
          reject(error);
        }
      })
    });

    // This doesn't.
    return fetch(`/wp-json/woo/donate/status/?email=${data}`, {
      method: 'GET',
    });
  }

请注意,我的代码中实际上没有两个连续的return语句,仅用于演示。我使用request()作为XHR的包装器,您可以找到source for that here

那么我该如何解决这个问题呢?我知道fetch仍然是&34;实验"但是我已经在几个已经发布的项目中使用它,将polyfill捆绑到尚不支持它的浏览器上。这是一件新鲜事。

1 个答案:

答案 0 :(得分:2)

通过销毁我的本地Vagrant机器并重新启动它来“重建”WordPress解决了这个问题。

一次,再次打开和关闭它可以解决问题。