2013-06-29 8 views
5

मैं एक फ़ंक्शन देख रहा था जो Django CSRF टोकन प्राप्त करने के लिए उपयोग करता है, जब आपको Jquery और जावास्क्रिप्ट का उपयोग करते हुए उपयोगकर्ता सत्र को सत्यापित करने की आवश्यकता होती है। यहाँ कोड है:जावास्क्रिप्ट में स्ट्रिंग तुलना समस्या

function getCookie(name) { 
    var cookieValue = null; 
    if (document.cookie && document.cookie != '') { 
     var cookies = document.cookie.split(';'); 
     for (var i = 0; i < cookies.length; i++) { 
      var cookie = jQuery.trim(cookies[i]); 
      // Does this cookie string begin with the name we want? 
      if (cookie.substring(0, name.length + 1) == (name + '=')) { 
       cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
       break; 
      } 
     } 
    } 
    return cookieValue; 
} 
var csrftoken = getCookie('csrftoken'); 

तुम भी djangoproject वेबसाइट, here पर यहाँ ऑनलाइन कोड देख सकते हैं।

Binary operation argument type String is not assignable to type HTMLCollection

क्या यह इस से क्या मतलब है:

ठीक है, अब जब मैं इस कोड पेस्ट, मैं अपने आईडीई से एक प्रकाश चेतावनी यह कह मिल सकता है?

document.cookie && document.cookie != '' 
+8

जो लाइन पर त्रुटि फेंक दिया जाता है? यह 911 को कॉल करने और फिर अपना पता नहीं दे रहा है। लाइन नंबर, कृपया! –

+0

मजेदार आदमी ... @ ŠimeVidas –

+1

आप किस आईडीई के बारे में बात कर रहे हैं? त्रुटि संदेश जावास्क्रिप्ट कोड के लिए समझ में नहीं आता है। – Pointy

उत्तर

0

पंक्ति 3: त्रुटि इस लाइन पर है!

if (document.cookie && document.cookie != '') { 

आईडीई कि रिक्त स्ट्रिंग '' चेतावनी है एक स्ट्रिंग प्रकार है, और वहाँ एक अंतर्निहित कलाकारों से उत्पन्न है = की document.cookie के प्रकार के लिए खाली स्ट्रिंग, जो एक HTMLCollection प्रकार है।

if (document.cookie && document.cookie != /**@type HTMLCollection*/'') { 

आपका आईडीई शायद प्रकार HTMLCollection के होने के रूप में document.cookie समझता है:

+0

इससे यह नहीं बदला कि मुझे डर है। –

+0

मुझे चेतावनी की उम्मीद नहीं होगी; यदि आप उपयोग करते हैं! == कोई अंतर्निहित प्रकार रूपांतरण नहीं होगा और आपकी आईडीई त्रुटि दूर हो जाएगी, हालांकि आपका परीक्षण कभी भी सच नहीं होगा! == प्रकारों की जांच करेगा और झूठी वापसी करेगा। HTMLCollection प्रकार ऑब्जेक्ट्स को तारों में कनवर्ट करने के बारे में एक [पोस्ट] (http://stackoverflow.com/questions/11125825/converting-a-object-htmlcollection-into-string-in-javascript) है। –

+0

यदि Jetbrains Pycharm Jetbrains IDEa की तरह काम करता है, तो आप शायद निरीक्षण प्रोफ़ाइल सेटिंग बदल सकते हैं? –

0
करने के लिए

कोशिश बदलाव लाइन 3। इनलाइन टिप्पणी दुभाषिया के लिए एक कलाकार के रूप में काम करता है।

4

समस्या यह है कि JetBrains PyCharm/Webstorm, "document.cookie" @type {HTMLCollection} के रूप में परिभाषित किया गया है के रूप में आप देख सकते हैं 'कुकी' चर (उस फ़ाइल खुल जाएगा "DHTML पर जब Ctrl क्लिक है .js "परिभाषा युक्त)। यह परिभाषा गलत है, 'document.cookie' के लिए सभी तकनीकी दस्तावेज़ इसे स्ट्रिंग के रूप में वर्णित करते हैं, उदाहरण के लिए http://www.w3schools.com/jsref/prop_doc_cookie.asp देखें, वास्तव में इसे जेटब्रेन टूल में WEB-11410 के रूप में भी रिपोर्ट किया गया था, और अब नए निर्माण में तय किया गया प्रतीत होता है।

यदि आप चेतावनी को हटाना चाहते हैं, तो gztomas द्वारा सुझाए गए इनलाइन टिप्पणी को जोड़ें या चेतावनी पर Alt-Enter दबाएं और "निरीक्षण" प्रकार मिलान 'विकल्प "पर जाएं और फिर" कथन के लिए दबाएं " जो केवल वर्तमान कथन के लिए चेतावनी को अक्षम कर देगा।

तुलना में बदलना! == जैसा कि गानन द्वारा सुझाया गया है, मदद नहीं करता है। असल में तुलना सही ढंग से काम करती है! == भी, शायद इसलिए क्योंकि यह आईडीई के साथ सिर्फ एक मुद्दा है, 'document.cookie' सभी ब्राउज़रों में एक स्ट्रिंग है।

(मैं पिछले जवाब पर टिप्पणी है, तो यह रूप में अतिरिक्त जवाब जोड़ने के लिए पर्याप्त प्रतिष्ठा नहीं है ...)

+0

यह एक बहुत अच्छा जवाब की तरह दिखता है, संबंधित बग का संदर्भ देता है और वास्तविक दस्तावेज के लिए यह क्या होना चाहिए। – dashesy

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