2013-02-05 6 views
0

나는 PHP 파일로 JSON 객체를 보내고에서 반환, PHP의 몇 가지 조작을 수행하고 JSON 문자열 반환JSON 개체를 읽을 수 없습니다가 PHP

echo json_encode($_POST); 
:

$('button#indexOpener').on('click', function() { 
    var aUsername = $('input#edUsername').val();  
    var aPassword = $('input#edPassword').val(); 

    if (($.trim(aUsername) != '') && ($.trim(aPassword) != '')) { 
     var str = $("#form_login :input").serializeArray(); 
     $.post("<?php echo URL; ?>ajax/checklogin", str, function(data) { 
      alert(data.edUsername); 
     }); 
    } 
    else { 
     alert('Please insert a valid username and password'); 
     alert("<?php echo URL; ?>/ajax"); 
    } 
}); 

는 PHP는 JSON 객체가 에코를

하지만 난 jQuery를 사용하여 데이터를 경고 할 때 :

function(data) { 
    alert(data.edUsername); 
} 

가 정의되지 않은 메시지가 표시됩니다. 나는 그것이 바보 같은 것이라고 확신하지만, 내가 잘못하고있는 것을 볼 수 없다. 도울 수 있니?

+0

데이터가 실제로 반환 여부, 콘솔을 확인 유무 : – Sirko

+0

시도의 CONSOLE.LOG (데이터) 그래서 당신은 전체 구조 –

+0

'$ ("#의 form_login : 입력")를 볼 수 있습니다 serializeArray(); '은 다음과 같이해야하지 않습니다.'$ ("#의 form_login"). serializeArray(); ' – Jai

답변

3

$.post()에 대해 설정된 데이터 유형이 없습니다. jQuery는 반환 된 내용 유형을 인식하려고 시도하지만 올바른 헤더를 설정해야합니다. 그래서, 당신은 추가해야합니다

header("Content-Type: application/json"); 

echo json_encode 전에, 또는 당신은 dataType와 설정해야합니다

$.post("<?php echo URL; ?>ajax/checklogin", str, function(data) { 
    alert(data.edUsername); 
}, "json"); 

이 방법, jQuery를이 있음을 알게 될 것이다 : ($.post()의 네 번째 매개 변수) JS 코드에서 "json으로" 반환 된 데이터는 JSON 형식이며 파싱되어야합니다. 이를 사용하지 않으면 jQuery는 Content-Type 헤더를 확인하고 그에 따라 파서를 적용합니다. 사용자 지정 콘텐츠 형식 헤더가 설정되어 있지 않으면 반환 데이터를 HTML로 반환합니다. 사실, 그것은 보통의 문자열입니다.

나는 단지 경고 (데이터) 반환하는 경우 { "edUsername": "QQQ" "edPassword": "QQQ를"}하지만 난 경고 경우 경고 (data.edUsername); "undefined"가 표시됩니까?

JSON은 클라이언트 측에서 구문 분석해야하는 일반 문자열입니다. jQuery는 응답을 일반 텍스트 또는 HTML로 감지하고 JSON을 Javascript 객체로 구문 분석하지 않습니다. 데이터가 객체 인 경우 경고 창에서 [object Object]를 가져옵니다.

var str = $("#form_login").serialize(); 

$.getJSON("<?php echo URL; ?>ajax/checklogin", {data:str}, function(data){ 
    alert(data.edUsername); 
}); 
+0

내가 제안한 것을 시도했지만 효과가 없습니다. 회신 해 주셔서 감사합니다. – user1536396

+0

처음에는 헤더 코드에서 실수를했습니다. 그러나 이제 업데이트됩니다. 데이터에서 json 문자열을 가져 오면 jquery가 객체로 변환하지 않는다는 유일한 문제입니다. dataType : "json"및 content-type 헤더가이를 수정해야합니다. –

+0

죄송합니다. 헤더를 잘못 입력 하셨으므로 해결책이 효과적입니다. 도움을 주신 모든 분들께 감사드립니다. – user1536396

0

나는이 $.getJSON()를 사용하여 이런 식으로해야한다고 생각? 또한 : 클라이언트 또는 서버 측의 오류가 있습니까?
관련 문제