2013-06-29 20 views
5

Bir kullanıcı oturumunu JQuery ve JavaScript kullanarak doğrulamanız gerektiğinde, Django'nun CSRF Token'i almak için kullandığı bir İşlev'e bakıyordum. İşte kod:Dize Karşılaştırma Sorununda JavaScript

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'); 

Ayrıca djangoproject sitesi, here çevrimiçi burada kodunu görebilirsiniz.

Binary operation argument type String is not assignable to type HTMLCollection

bu ne demek istiyor: Bu kodu yapıştırdığınızda Tamam

şimdi ben bu diyerek benim IDE hafif uyarısı alıyorum?

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

hangi hattı üzerinde hata atılır? Bu 911'i aramak ve adresinizi vermemek gibi bir şey. Hat numarası, lütfen! –

+0

Komik adam ... @ ŠimeVidas –

+1

Hangi IDE'den bahsediyorsun? Hata kodu JavaScript kodu için anlam ifade etmiyor. – Pointy

cevap

0

Hat 3: Hata bu satırda! IDE boş dize '' gerektiği yönünde uyarıyor

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

bir dize türüdür ve kaynaklanan örtük bir döküm var = arasında HTMLCollection türü olan document.cookie türüne boş dize.

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

Kişisel IDE muhtemelen tip HTMLCollection varlık olarak document.cookie anlar: için

+0

Bu değişmedi Bu korkarım. –

+0

Uyarıların gitmesini beklemem; Eğer kullanırsanız! == örtülü bir tür dönüşümü olmayacak ve IDE hatasınıniz ortadan kalkacak, ancak testiniz asla gerçek birer iade etmeyecektir! ==, türleri kontrol edip yanlış döndürecektir. HTMLCollection türü nesneleri dizelere dönüştürme hakkında bir [post] (http://stackoverflow.com/questions/11125825/converting-a-object-htmlcollection-into-string-in-javascript) vardır. –

+0

Jetbrains Pycharm, Jetbrains IDEa gibi çalışıyorsa, muhtemelen denetim profili ayarını değiştirebilirdiniz? –

0

deneyin modifiye hattı 3. Satır içi yorum, yorumlayıcı için bir döküm olarak çalışır.

4

sorun 'çerez' değişken (bu dosyayı açacak "DHTML üzerinde iken Ctrl-tıklayarak görebileceğiniz gibi JetBrains pycharm/WebStorm, @type {HTMLCollection} olarak tanımlanan "document.cookie" olmasıdır .js "tanımı içeren". Bu tanım yanlıştır, 'document.cookie' için tüm teknik dokümanlar bir dize olarak tanımlanır, örneğin bkz. http://www.w3schools.com/jsref/prop_doc_cookie.asp Aslında Jetbrains araçlarında WEB-11410 hata olarak bildirildi ve artık yeni yapılarda düzeltilmiş gibi görünüyor.

Uyarıyı kaldırmak isterseniz, satır içi yorumu gztomas tarafından önerilen şekilde ekleyin ya da uyarıya Alt-Giriş tuşuna basın ve "denetim" türü uyuşmazlığı "seçeneklerine gidip" ifadeyi bastır "seçeneğine gidin, Bu sadece geçerli deyim için uyarıyı devre dışı bırakır.

Karşılaştırma, Gannon tarafından önerildiği gibi! == olarak değiştirilmesinde yardımcı olmaz. Aslında karşılaştırma,! == ile de doğru şekilde çalışıyor, büyük olasılıkla bu sadece IDE ile ilgili bir sorun olduğundan, 'document.cookie' tüm tarayıcılarda bir dizgedir.

(yani bu ekstra cevabı ekleyerek önceki cevaplar üzerinde yorum için yeterli itibar yok ...)

+0

Bu oldukça iyi bir yanıt gibi görünüyor, ilgili hatayı referans ve ne olması gerektiği ile ilgili gerçek belgelere. – dashesy