d3.request on(错误)回调不触发401响应

时间:2017-05-23 16:12:05

标签: javascript ajax d3.js callback xmlhttprequest

d3:4.8.0

我在后端强制执行HTTP 401响应来测试授权例程。

import first while (first.rocket<10): print 'rocket less than 10' print 'done' 未被调用。

d3文档让我认为应该:https://github.com/d3/d3-request/blob/master/README.md#request_send

示例JS:

d3.request().on('error', function(e){...})

预期的控制台日志:

var postData = whatever;

d3.request(someURL)
  .on('error', function(e) {
    console.log('In on(error): ', e);
  })
  .header("Content-Type","application/x-www-form-urlencoded")
  .send('POST', postData, function(error,response) {
      if (error) {
          console.log('Error in send() callback: ', error);
          return;
      }
      console.log('okay');
});

收到控制台日志:

POST https://someURL/ 401 (Unauthorized)
XHR finished loading: POST "https://someURL/"
In on(error): ProgressEvent {isTrusted: true ... }

未触发on('error')回调。我已经尝试更改链中的on()调用位置,这应该没关系,并且没有。

1 个答案:

答案 0 :(得分:0)

在这个问题中,带有两个参数的send()阻止了on()的触发。下面是一个示例,它响应401结果调用on(错误),并成功调用send回调:

d3.request(someURL)
  .header("Content-Type","application/x-www-form-urlencoded")
  .send('POST', postData, function(response) {
      console.log('in send() callback with response ', response)
  })
  .on('error', function(e) {
    console.log('on() error: ', e);
  })
;