2013-05-31 51 views
28

我想在AJAX请求上设置cookie值,但下面的代码不起作用。如何使用AJAX请求设置cookie值?

$.ajax({ 
    type: "GET",  
    url: "http://example.com", 
    cache: false, 
    setCookies: "lkfh89asdhjahska7al446dfg5kgfbfgdhfdbfgcvbcbc dfskljvdfhpl", 
    crossDomain: true, 
    dataType: 'json', 
    success: function (data) { 
     alert(data); 
    }); 

如何在标头中设置Cookie?

+4

目前根本没有'在设置setCookies'选项。 – gdoron

+0

你想做什么..? –

+1

您应该先在javascript中设置cookie,然后发送请求。标题将在ajax请求中包含您的cookie。使用这些函数来设置和获取Cookie中的cookie:http://www.w3schools.com/js/js_cookies.asp – Michael

回答

37

基本上,ajax请求以及同步请求会自动发送您的文档cookie。所以,你需要设置你的cookie文件,而不是要求。但是,您的请求是跨域的,事情变得更加复杂。此基础上this answer,还设置Cookie文件,你应该允许其发送给跨域环境:

type: "GET",  
url: "http://example.com", 
cache: false, 
// NO setCookies option available, set cookie to document 
//setCookies: "lkfh89asdhjahska7al446dfg5kgfbfgdhfdbfgcvbcbc dfskljvdfhpl", 
crossDomain: true, 
dataType: 'json', 
xhrFields: { 
    withCredentials: true 
}, 
success: function (data) { 
    alert(data); 
}); 
+4

如果我想要,有点,假的cookie并发送它没有设置它?毕竟,cookie只是一个标题,来吧! :) –

+0

@TomášZato根据[XHR规格](http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader() - 方法),你不能这样做。 (请参阅第5点'如果标头是不区分大小写的匹配,则终止这些步骤... ...'Cookie' ...'上述标头由用户代理控制,以使其控制传输的这些方面。某种程度上。“)。我相信你通过在请求前设置*并在'complete'回调中删除,你仍然可以*伪造一个cookie。我相信这是我们在浏览器中可以做到的最多。 – Tommi

+0

我通常只是提醒自己,JavaScript是单线程的,因此设置cookie并在之后删除它不会对其他脚本产生负面影响。 –