首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >成员-cli-海市蜃楼响应标头从XHR对象中丢失。

成员-cli-海市蜃楼响应标头从XHR对象中丢失。
EN

Stack Overflow用户
提问于 2017-05-30 22:21:26
回答 1查看 457关注 0票数 1

试图理解在使用我的api与成员-cli-海市蜃楼之间的反应不一致。

我有一个处理程序,等待一个POST请求的响应来验证用户。处理程序的预期参数是responsestatusxhr

(如.then(function(response, status, xhr) {...})。

使用我的API,我会收到预期的结果--响应是数据,状态是statusText,xhr是xhr对象。然而,使用成员-cli-海市蜃楼,一切都是响应(某种),状态和xhr都是未定义的。

我的代码片段如下:

幻影/config.js

代码语言:javascript
复制
this.post(URI.AUTH_SIGN_IN, function(db, request) {
  const responseHeaders = {
    'access-token': 'abcxyz123',
    'client': 'foobarbaz',
    'token-type': 'Bearer',
    'expiry': '1497364419',
    'uid': 'user@example.com'
  };

  const user = {
    data: { id: 1, type: 'user', attributes: { uid: 'user@example.com', email: 'user@example.com', name: 'John Doe', provider: 'email' } }
  };

  return new Mirage.Response( 200, responseHeaders, user );
});

认证者/设计.

代码语言:javascript
复制
authenticate(identification, password) {
  ...
  this.makeRequest( credentials ).then(function(response, status, xhr) {
    // persists the five headers needed to send to devise-token-auth
    // with mirage; response = Response {type: "default", status: 200, ok: true, statusText: "OK", headers: Headers…}, status = undefined, xhr = undefined
    // with actual api; response = Object {data: Object}, status = "success", xhr = Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function…}

    // As a result below will fail :( 
    // TypeError: Cannot read property 'getResponseHeader' of undefined
    var result = {
        'access-token': xhr.getResponseHeader( 'access-token' ),
        expiry:         xhr.getResponseHeader( 'expiry' ),
        tokenType:      xhr.getResponseHeader( 'token-type' ),
        uid:            xhr.getResponseHeader( 'uid' ),
        client:         xhr.getResponseHeader( 'client' )
      };
   });
}

我相信我做的一切都是正确的,但大家都知道我错了。)任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2017-05-31 11:24:54

嗯,我不知道为什么makeRequest会返回第二个和第三个对角未定义的参数。

我做了一个简单的Twiddle,getJSON的args看起来是正确的

https://ember-twiddle.com/70229e352f37b4e437ced8509a4415d9?openFiles=routes.application.js%2C

代码语言:javascript
复制
model() {
  return Ember.$.getJSON('/foo').then((data, response, object) => {
    return object.getAllResponseHeaders();
  });
}

可能与Pretender处理模拟响应的方式或makeRequest的工作方式略有不同,所以我建议从那里开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44272835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档