d3.js ajax默认头文件/发送前

d3.js ajax默认头文件/发送前,ajax,d3.js,http-headers,Ajax,D3.js,Http Headers,我需要为所有d3.js xhr调用设置标题。我知道你可以设置为单数呼叫 d3.json(“/path”).header('X-request-With','XMLHttpRequest') 我正在寻找类似jQuery的beforeSend方法的东西 $.ajaxSetup({ beforeSend: function(xhr) { xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); } });

我需要为所有d3.js xhr调用设置标题。我知道你可以设置为单数呼叫

d3.json(“/path”).header('X-request-With','XMLHttpRequest')

我正在寻找类似jQuery的beforeSend方法的东西

$.ajaxSetup({
    beforeSend: function(xhr) {
      xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    }
  });

您可以查看d3源代码(查找
函数d3_xhr
),或者相信我的话(我刚刚查找过),没有办法为
d3.json()指定默认头

但是,没有什么可以阻止您为此创建和使用自己的方法,例如

function myJson(args) {
  // call d3's json, passing through any arguments that were
  // passed into myJson(), and then set the headers you want
  return d3.json.apply(null, arguments)
    .header('X-Requested-With', 'XMLHttpRequest');
}
从而允许您进行如下json请求

myJson('/path', function(json) {...})
这当然要求您在任何地方都使用
myJson()
来代替
d3.json
。但是,如果您确定无论何时调用
d3.json
,您总是希望在默认情况下设置这些头,那么您可以继续使用上面的自定义
myJson
覆盖
d3.json
。例如:

// save the originial implementation of d3.json
var d3Json = d3.json;

// define your own implementation of d3.json, which relies on
// the original implementation
d3.json = function() {
  // notice the use of d3Json — NOT d3.json, as shown above
  return d3Json.apply(null, arguments)
    .header('X-Requested-With', 'XMLHttpRequest');
}

从那时起,当您在应用程序中的任何位置调用
d3.json(…)
(这包括可能调用
d3.json的任何供应商代码)时,它将运行您的自定义函数,该函数将依次调用原始
d3.json(…)
,并设置默认标题。

出于某种原因,
meetamit
的d3建议对我不起作用,因此我将其稍作修改:


现在,在2021年的遥远未来,D3使用的是XML而不是XHR。这意味着在请求上设置头的方法是不同的

json()
方法的D3代码如下:

函数json(输入,初始化){ 返回fetch(输入,init),然后返回responseJson; }
可以看出,D3
json()
方法允许将配置对象直接传递给fetchAPI。这意味着,如果您以以下方式调用该方法,则可以在请求上设置头

d3.json(“/somepath to call”,{headers:{“X-request-With”:“XMLHttpRequest”}})

谢谢,我只是想知道在开始阅读源代码之前是否有办法。将执行第二项建议,因为有些请求来自第三方。如果没有其他答复,将在几天内标记为答复。
// save the originial implementation of d3.json
var d3Json = d3.json;

// define your own implementation of d3.json, which relies on
// the original implementation
d3.json = function(url, handler) {
    // notice the use of d3Json — NOT d3.json, as shown above
    return d3Json(url).header('X-Requested-With', 'XMLHttpRequest').get(handler);
}