2013-05-31 4 views
28

मैं एक AJAX अनुरोध पर एक कुकी मान सेट करना चाहता हूं लेकिन नीचे दिया गया कोड काम नहीं करता है।AJAX अनुरोध के साथ कुकी मान कैसे सेट करें?

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

मैं हेडर में कुकीज़ कैसे सेट कर सकता हूं?

+4

वहाँ बस नहीं 'सेटिंग्स में setCookies' विकल्प है। – gdoron

+0

आप क्या करने की कोशिश कर रहे हैं ..? –

+1

आपको कुकी को पहले जावास्क्रिप्ट में सेट करना चाहिए और फिर अनुरोध भेजना चाहिए। शीर्षलेख में आपकी कुकी एजेक्स अनुरोध पर होगी। जेएस में कुकी सेट करने और प्राप्त करने के लिए इन फ़ंक्शंस का उपयोग करें: http://www.w3schools.com/js/js_cookies.asp – Michael

उत्तर

37

असल में, AJAX अनुरोध के साथ ही तुल्यकालिक अनुरोध आपके दस्तावेज़ कुकीज़ को स्वचालित रूप से भेजता है। इसलिए, आपको अपनी कुकी को दस्तावेज़ में सेट करने की आवश्यकता है, अनुरोध न करें। हालांकि, आपका अनुरोध क्रॉस-डोमेन है, और चीजें अधिक जटिल हो गईं। this answer के आधार पर, अतिरिक्त दस्तावेज कुकी सेट करने के लिए, आप अपने क्रॉस-डोमेन पर्यावरण के लिए भेजने की अनुमति देने चाहिए:

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

और यदि मैं चाहता हूं, तो नकली कुकी, इसे सेट किए बिना भेज दें? आखिरकार, कुकी सिर्फ एक हेडर है, चलो! :) –

+0

@ टॉमसज़ेटो [एक्सएचआर चश्मा] के अनुसार (http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader() -method) आप इसे नहीं कर सकते हैं। (प्वाइंट 5 देखें 'हेडर एक केस-असंवेदनशील मिलान' है, तो इन चरणों को समाप्त करें ... 'कुकी' ... 'उपरोक्त शीर्षलेख उपयोगकर्ता एजेंट द्वारा नियंत्रित किए जाते हैं ताकि वे परिवहन के उन पहलुओं को नियंत्रित कर सकें। यह डेटा अखंडता की गारंटी देता है कुछ हद तक। ')। मेरा मानना ​​है कि आप अनुरोध * अनुरोध से पहले * इसे पूरा करके और 'पूर्ण' कॉलबैक पर हटाकर * नकली * एक कुकी * कर सकते हैं। मुझे विश्वास है कि ब्राउज़र में हम जितना अधिक कर सकते हैं। – Tommi

+0

मैंने केवल खुद को याद दिलाया कि जावास्क्रिप्ट एकल थ्रेडेड है, इसलिए एक कुकी सेट करना और इसे बाद में हटाने से अन्य स्क्रिप्ट पर नकारात्मक नतीजे नहीं होंगे। –

संबंधित मुद्दे