2010-06-24 2 views
2

사용자가 로그인하고 false를 반환하는지 확인하는 php가 있습니다. 그러면 브라우저에 ajax를 통해 전달되어 브라우저에 로그인해야합니다.즉 JSON 문자열에서 'false'를 이해하지 못하고 있습니까?

FF에서 완벽하게 작동하고 경고가 반환됩니다. '사실'하지만, IE, 그것은 상관없이 내가

// Check for logged in user 
    $.getJSON(baseUrl+"index.php/login/checkState", function(data) { 
        alert(data); 
     if(data==true){ 
      dologInState(); 
     }else{ 
      dologOutState(); 
     } 
    }); 

PS를 무엇을 ' 널 (null)'반환 : 문자열은 PHP에서 반환

모든 아이디어를 단순히 거짓?

+0

'true'또는 'false'라는 문자열을 반환하고 JSON이라고 부를 수 있다고 생각하지 않습니다. – BoltClock

답변

0

결국이 문제를 해결할 수있었습니다. 문제는 아약스 호출로 시작하는 것이 아니 었습니다.

ajax 호출이 "인증 쿠키가 있습니까?"라는 간단한 확인을 수행하여 PHP에서 true 값과 false 값을 얻는 것이 었습니다.

내가 어떻게 FF로 작동하고 IE에서 작동하는지 알 수는 없지만 응용 프로그램의 90 %가 js에서 빌드되고 아약스가 솔루션을 호출 한 이후로 PHP가 아니라 자바 스크립트로 모든 쿠키 검사를 처리하십시오.

필자도 지금 json 문자열을 저장하기 위해 쿠키를 얻었습니다.

많은 도움 주셔서 감사합니다.

8

JSON이 유효하면 (json.orgJSONlint 참조) data은 플래그가 아닌 개체 또는 배열입니다.

문자열 false은 자체 JSON이 아닙니다. JSON 표기법의 최상위 레벨은 항상 객체 ({ ... }) 또는 배열 ([ ... ])입니다. 이 유효 JSON하려면, 당신은이 작업을 수행 할 수 있습니다

{"success": false} 

... 다음 테스트

$.getJSON(baseUrl+"index.php/login/checkState", function(data) { 
    alert(data); 
    if(data.success){ // <== Note here we're checking the `success` property of the deserialized object 
     dologInState(); 
    }else{ 
     dologOutState(); 
    } 
}); 

일부 "JSON"파서 (JavaScript 표현식 파서 전체 사실 기본적으로 그냥 eval를 사용을 , 이것은 위험합니다). 이것은 의도 한대로 문자열 false을 해석 할 수 있지만, 올바른 구문 분석기가이를 거부하기 때문에 의존 할 수 없습니다.

+0

안녕하세요, 감사합니다 4 도움. 나는 그것에게 시도를 주었고 또한 그것이 문제라고 생각했다. 그러나 나는 여전히 '성공'이 객체가 아니라 null에있는 오류를 얻는다. fireBug는 PHP에서 반환 된 문자열을 { "success": false} –

+0

으로 표시합니다. @Derrick :'success' 또는'data.success'를 확인 하시겠습니까? 'getJSON'로부터의 콜백은 직렬화 복원 된 객체를받습니다. JSON 문자열이'{ "success": false}'이면,'data'의 직렬화되지 않은 객체는'false' 값을 갖는'success' 속성 하나를가집니다. 나는 더 많은 맥락으로 대답을 업데이트 할 것이다. –

+0

@ T.J .: +1, 단지 작은 메모 : 예, 객체는 * truthy *입니다. 'x == y','y'가'Boolean' 인 경우,'x == ToNumber (y)'는 비교 될 것이기 때문에'({}) == true'와'({}) == false 사실 둘 다 '거짓'으로 평가됩니다. 다른 다른 경우는 빈 배열 객체와 함께 발생합니다. '[] == false; // true'입니다. 빈 배열은 숫자로 변환 될 때 0으로 강제 변환되기 때문에'+ [] === 0'입니다. – CMS

관련 문제