YUI 3 - 为Ajax设置全局请求标头

时间:2011-07-06 04:34:57

标签: javascript ajax yui

我以前主要使用jQuery而且我是YUI的新手。我希望使用YUI 3中的IO或DataSource为每个Ajax请求设置自定义标头。我希望为每个请求自动插入标头。在jQuery中,我可以使用$ .ajaxPrefilter完成此操作,如下所示:

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    var value = 'blah';
    if (value) {
        jqXHR.setRequestHeader("My-Custom-Header", value);
    }
});

我在YUI 3的在线文档中找到了这些页面,但我不是“得到它”。我怎么能做到这一点?

http://developer.yahoo.com/yui/3/examples/io/io-get.html

http://developer.yahoo.com/yui/3/api/io.html

3 个答案:

答案 0 :(得分:4)

查看io模块中的“标题”方法:API docs

我没有测试过,但你应该可以这样做:

YUI().use('io', function(Y) {
    Y.io.header('X-My-Header', 'My Custom Value');

    Y.io(/*...*/); // Should have the X-My-Header HTTP header
});

请注意,这仅适用于当前的YUI实例。因此,如果您有另一个YUI().use(/.../)语句,则需要再次设置标题。

如果您需要跨实例提供标头,则应定义自己的包装Y.io功能的模块。查看this gist以了解其中包含的内容。

答案 1 :(得分:3)

老实说,我认为做“JQuery风格”并不是一个好主意。无论哪种方式,您都需要提供配置对象,因此更少的字符没有太大的区别。

但最糟糕的是,当其他人看到你的代码时,他就不知道额外的标题来自何处,他可能会浪费数小时的生命。

如果您仍想在某处使用默认标头,请按照以下方式执行Javascript:

Y.myDefaultIOCfg={"My-Custom-Header":value}
...
var cfg=Y.merge(Y.myDefaultIOCfg, {
    method: 'GET',
    data: 'foo=bar'
})
request = Y.io(uri, cfg)

这样你明确地说你正在使用一些对象作为配置对象的模式,并且可以在那里找到额外的头文件定义。

答案 2 :(得分:1)

我不太了解YUI语法,但试试这个:

YUI().use("io-base", function(Y) {
  var cfg, request;

  cfg = {
    methos: 'GET',
    data: 'foo=bar',
    headers: {
      'My-Custom-Header': value
    }
  }

  request = Y.io(uri, cfg);
});