2013-06-29 2 views
5

Jquery와 JavaScript를 사용하여 사용자 세션의 유효성을 검사해야 할 때 장고가 CSRF 토큰을 얻기 위해 사용하는 함수를 살펴 보았습니다. 여기에 코드입니다 :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'); 

당신은 또한 djangoproject 웹 사이트, here 온라인 여기에 코드를 볼 수 있습니다.

Binary operation argument type String is not assignable to type HTMLCollection

가이 무엇을 의미합니까 : 나는이 코드를 붙여 넣을 때 좋아

지금, 나는이 말을 내 IDE에서 빛 경고를?

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

어떤 줄에 오류가 발생합니까? 이것은 911에 전화를 걸어 주소를 알려주지 않는 것과 같습니다. 줄 번호주세요! –

+0

재미 있은 남자 ... @ ŠimeVidas –

+1

어떤 IDE에 대해 이야기하고 있습니까? JavaScript 코드에 오류 메시지가 적용되지 않습니다. – Pointy

답변

0

3 호선 : 오류는이 라인에! IDE는 빈 문자열 ''고 경고하고

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

문자열 유형, 그리고으로 인한 암시 적 캐스트가 =의 빈 문자열을 HTMLCollection 유형 인 document.cookie 유형으로 변환합니다.

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

귀하의 IDE 아마 유형 HTMLCollection의 것으로 document.cookie을 이해 님의

+0

그건 바뀌지 않았어. 나는 두려워. –

+0

나는 경고가 사라지는 것을 기대하지 않을 것이다. ! ==를 사용하면 암시 적 유형 변환이 발생하지 않고 IDE 오류가 사라지지만 테스트는 true를 반환하지 않습니다. becuas! ==는 유형을 확인하고 false를 반환합니다. HTMLCollection 유형 객체를 문자열로 변환하는 것에 대한 [post] (http://stackoverflow.com/questions/11125825/converting-a-object-htmlcollection-into-string-in-javascript)가 있습니다. –

+0

Jetbrains Pycharm이 Jetbrains IDEa와 같이 작동하면 검사 프로파일 설정을 변경할 수 있습니까? –

0

시도의 수정 라인 3. 인라인 주석은 인터프리터에 대한 캐스트로 작동합니다.

4

문제는 당신이 '쿠키'변수 (즉, 파일을 열 것 "DHTML에 때 Ctrl 키를 클릭을 볼 수 JetBrains의 PyCharm/Webstorm이 @type {HTMLCollection}로 정의"document.cookie를 "을 가지고 있다는 것입니다 .js "는 정의를 포함합니다). 그 정의가 잘못되었습니다. 'document.cookie'에 대한 모든 기술 문서는 문자열로 설명합니다. 예를 들어 http://www.w3schools.com/jsref/prop_doc_cookie.asp Jetbrains 도구에서는 WEB-11410이라는 버그로보고되었으며, 이제는 새로운 빌드에서 수정 된 것으로 보입니다.

경고를 제거하려면 gztomas에서 제안한대로 인라인 주석을 추가하거나 경고에서 Alt-Enter를 누르고 "검사 유형 불일치 '옵션"으로 이동 한 다음 "명령문 억제"로 이동하십시오. 현재 명령문에 대한 경고 만 사용 불가능하게합니다.

비교를! ==로 변경하면 Gannon이 제안한 내용이 도움이되지 않습니다. 실제로 비교는! ==와도 올바르게 작동합니다. IDE와 관련된 문제 일 뿐이므로 대부분 'document.cookie'는 모든 브라우저의 문자열입니다.

(나는 이전 답변에 대한 의견을 말할 수있는 충분한 평판이 없으므로 추가 대답으로 추가하십시오 ...)

+0

이것은 꽤 좋은 대답처럼 보입니다. 관련 버그와 그 내용이 무엇인지에 대한 실제 문서를 참조하십시오. – dashesy