2011-07-06 34 views
4

我之前主要使用過jQuery,而且我是YUI的新手。我希望在YUI 3中使用IO或DataSource爲每個Ajax請求設置自定義頭。我希望爲每個請求自動插入頭。在jQuery中,我可以像這樣用$ .ajaxPrefilter做到這一點:YUI 3 - 爲Ajax設置全局請求標頭

$.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

回答

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以瞭解需要什麼。

+0

啊!這就是我一直在尋找的東西。然而,最不幸的是它不能跨YUI實例工作。我的應用程序將由多個YUI實例組成。 –

+0

更新了在YUI實例中工作的答案。 –

+0

真棒尼克。超出了我的期望。謝謝! –

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); 
}); 
+0

謝謝安東尼,但我已經在做你的建議。我希望做的事情是自動插入標題,而不必每次都做。 YUI文檔在這方面不太清楚。或者我可能有點密集! :) –

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) 

這樣你明確地說,您使用的是一些對象作爲配置對象,並附加頭定義模式可以在那裏找到。

+0

同意。 jQuery缺乏結構是我決定在這個特定項目中使用YUI的原因之一。這種技術不是太麻煩,我可以很容易地使它工作。此外,它還具有爲其他開發人員留下足跡的額外好處。 –