d3.js ajax默认头文件/发送前
我需要为所有d3.js xhr调用设置标题。我知道你可以设置为单数呼叫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.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;
}
可以看出,D3json()
方法允许将配置对象直接传递给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);
}