2014-12-12 6 views
1

Мне нужно установить заголовки для всех вызовов d3.js xhr. Я знаю, что вы можете установить его для особых вызововd3.js ajax заголовки по умолчанию/перед отправкой

d3.json("/path").header('X-Requested-With', 'XMLHttpRequest')

я ищу что-то вроде метода beforeSend JQuery в

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

ответ

2

Вы можете проверить исходный d3 (код ищет function 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, тогда вы можете пойти и (задохнуть) переписать d3.json с чем-то вроде обычаев myJson. Например:

// 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(...) и установите заголовки по умолчанию.

+0

Спасибо, было просто интересно, если есть способ, прежде чем я начал просматривать исходный код. Будет выполнять вторую рекомендацию, поскольку некоторые запросы поступают от третьей стороны. Отметьте как ответ через пару дней, если нет других ответов. –

1

По какой-то причине, d3 предложение meetamit «s не работает для меня, поэтому я изменил его немного, как how the d3 documentation suggests to add the header:

// 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); 
} 
Смежные вопросы