2012-07-19 2 views
0

을 반환 :jQuery.ajax() 호출 나는 다음과 같은 jQuery.ajax() 호출 디버깅하려고 JSON.parse 예상치 못한 문자 오류

function myMethod(){ 
$query = $this->db->query("SELECT tblontario.Address, tblontario.Municipality FROM tblontario WHERE RollNum = 211010002528200"); 
$json_address = array(); 
$json_municipality = array(); 
foreach ($query->result_array() as $row){ 
    $json_address[]  = $row['Address']; 
    $json_municipality[] = $row['Municipality']; 
} 
$json['address'] = $json_address; 
$json['municipality'] = $json_municipality; 
echo json_encode($json); 
exit; 
    } 

: 여기

var rollnum = $('#rollNum').val() 
$.ajax({ 
url: sURL + "myController/myMethod", 
type: "POST", 
data: {rollnum: rollnum}, 
dataType: 'json', 
success: function(json){alert(json)}, 
error:function (xhr, ajaxOptions, thrownError){ 
     alert(xhr.status); 
     alert(thrownError);} 
}); 

하는 방법입니다 현재 무슨 일이 일어나고있는 것은 내가 실수를하고 있다는 것입니다. 이 오류는 이러한 세부 구성 : 내가 불을 지르고에서 XHR 응답 탭을 보면

xhr.status: 200; and 
thrownError: SyntaxError: JSON.parse: unexpected character 

그것을 보여줍니다

Reload the page to get source for: http://www.mysite.ca/myController/myMethod 

뭔가 우리가 (200)의 xhr.status을 받고 있기 때문에 제대로 작동하는 것 같군 ,하지만이 호출에서 json 데이터를 다시 검색 할 수 없습니다. 아무도 내게 문제가 무엇에 대한 제안을 줄 수 있습니까? 감사.

+0

실제 응답은 ...입니까? –

답변

1

서버는 리디렉션 코드 중 하나 대신 코드 200을 사용하여 리디렉션 페이지를 반환합니다. AJAX 호출은 상태 코드가 200이므로 리디렉션하지 않으며 JSON이 아니기 때문에 응답을 디코딩 할 수 없습니다.

서버가 올바른 상태 코드를 반환하도록하거나 페이지를 검사하여 해독하기 전에 리디렉션 메시지를 조사 할 수 있도록 일반 텍스트로 페이지를 요청하십시오.

+0

올바른 방향으로 나를 가리켜 주셔서 감사합니다. 문제는 페이지에 사용자가 로그인해야한다는 것이 었습니다. 테스트 중에는 그렇지 않았습니다. 방화 광의 NET-> XHR 탭을보고 POST 헤더 응답을 검토하여 이것을 디버깅 할 수있었습니다. 당신의 도움을 주셔서 감사합니다. – DanielAttard

3

내용의 헤더를 json 유형으로 설정하십시오. 다음은 헤더 유형을 설정하는 예제입니다.

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

jQuery 1.4 이상에서는 JSON 데이터가 엄격하게 구문 분석됩니다.

잘못된 JSON은 거부되고 구문 분석 오류가 발생합니다.

+1

비슷한 문제가 있다고 말하고 싶지만'Content-type'이'application/json'으로 설정되어 있기 때문에 잘못 될 수있는 것은 아닙니다. 내가하고있는 것을 내가 알았 으면 좋겠다. – 2rs2ts

0

텍스트 편집기에서 BOM (BOM이없는 UTF-8 인코딩)을 해제하십시오. BOM은 UTF8 파일의 시작에서 시스템 (보이지 않는) 기호입니다.