2012-04-08 6 views
3

php jquery/json/ajax에서 응답을받는 데 문제가 있습니다. 나는이 모든 다른 튜토리얼을 결합하여 유지하고 있지만, 나는 아무 것도 배우지 않은 튜토리얼을 따라갈 수 없다.Jquery JSON 응답 받기

지금 당장 나는 jquery ajax 함수에 연관 배열을 전달하는 쉬운 방법이 없으므로 두 개의 배열을 전달하려고 시도하고있다. 여기에 내 코드입니다 :

PHP

$names = array('john doe', 'jane doe'); 
$ids = array('123', '223'); 

$data['names'] = $names; 
$data['ids'] = $ids; 

echo json_encode($data); 

jQuery를 내 html 파일에서

function getList(){ 
    $.ajax({ 
     type: "GET", 
     url: 'test.php', 
     data: "", 
     complete: function(data){ 
      var test = jQuery.parseJSON(data); 
      alert(test.names[0]); 
      alert("here"); 
     } 
    }, 
     "json"); 
} 
getList(); 

정말 전화 했어 모든 디버깅 목적으로 내 자바 스크립트 파일입니다. 나는 객체를 반환하는 것을 알고 있지만 내 이름 섹션의 null 값에 오류가 발생합니다. 이유는 확실하지 않습니다. 내가 뭘 놓치고 있니? 그것은 Uncaught TypeError: Cannot read property '0' of undefined 나의 sub0이 나를 죽이고 여기 끝나는 것 같다

{"names":["john doe","jane doe"],"ids":["123","223"]} 

내 PHP 파일을 반환합니다.

+0

나는 이러한 문제를 해결하려고 할 때, 나는 두 가지로 분할 : 서버 측과 클라이언트 측. 1 단계 : 서버에서 예상하는 형식으로 JSON 객체를 반환합니까? 브라우저에서 /test.php를 치고 JSON 응답을 검사하십시오. 그 모양이 좋으면 JS 콜백에 JSON 문자열을 출력하십시오. – jmort253

+1

나는 $ .ajax에서 데이터 타입을 설정해야한다고 생각한다. 'json'대신 끝에 'json'을 붙인다. ($ .get 또는 $ .post에서 어떻게하는지) – kappa

+0

내 PHP 파일은 나에게 잘 들린다. 어떻게 경고 신호 외에도 내 json 출력을 볼 수 있습니까? –

답변

5

당신은 표준 JSON 요청에 필요한 모든 아약스 PARAMS jQuery를 제공하는 $.getJSON 외관이 의지 설정을 사용 prob는 수 :

$.getJSON('test.php', function(response) { 
    alert(response.names[0]); // john doe 
}); 

그러나 나는 문제의 경로가 생각을 1) 서버가 올바른 응답 코드 및/또는 올바른 헤더 (예 : JSON 데이터)를 반환하지 않을 수 있습니다. 그러나 위의 방법은 적어도 후자의 경우이 결론을 강제해야합니다.

은 참조 : http://api.jquery.com/jQuery.getJSON

+0

그래,이게 내 문제를 해결 했어! –

+0

어떻게 든 $ .ajax를 유지하고 싶다고 생각했습니다. 보통 $ .get (...., 'json')을 사용합니다. – kappa

+1

+1 - 이것은 더 간단한 구문입니다. – jmort253

1

단일 개체에서 ajax() 함수의 모든 매개 변수를 전달해야합니다. 따라서 "dataType"옵션이 있어야합니다. 또한 데이터 유형을 명시 적으로 설정하면 jQuery가 JSON 데이터를 구문 분석합니다. 완전한 콜백은 구문 분석 된 JavaScript 객체를 매개 변수로받습니다. 그것은 문제처럼 보인다

function getList() { 
    $.ajax({ 
     type: "GET", 
     url: 'test.php', 
     data: "", 
     dataType: "json", 
     success: function(test) { 
      alert(test.names[0]); 
      alert("here"); 
     } 
    }); 
} 
+0

데이터 형식에 대한 호출이 좋습니다. 그러나 문제는 전체 콜백은 서버의 데이터를 첫 번째 매개 변수로 포함하지 않는다는 것입니다. 내 답변에는 전체 콜백에 대한 참조가 포함되었습니다. "완료"를 "성공"으로 변경하면 귀하의 답변이 정확할 것이라고 100 % 확신합니다. – jmort253

+1

네 말이 맞아. 나는이 실수를 바로 잡기 위해 나의 대답을 편집했다. –

+0

답을 올바르게 작성하려면 +1하십시오. – jmort253

3

당신이 대신 성공 콜백의 전체 콜백을 사용하고 있다는 것입니다 :

function getList(){ 
    $.ajax({ 
     type: "GET", 
     url: 'test.php', 
     data: "", 
     success: function(data) { /* success callback */ 
      var test = jQuery.parseJSON(data); 
      alert(test.names[0]); 
      alert("here"); 
     } 
    }, 
    "json"); 
} 
getList(); 

jQuery AJAX에서 문서 :

성공 (데이터, textStatus, jqXHR)

요청이 성공하면 호출 할 함수. 이 함수는 세 개의 인수를 전달받습니다. dataType 매개 변수에 따라 형식이 지정된 서버에서 반환 된 데이터. 상태를 설명하는 문자열. 및 jqXHR (jQuery 1.4.x, XMLHttpRequest에서) 객체. jQuery 1.5부터 성공 설정은 일련의 함수를 수용 할 수 있습니다. 각 함수가 순서대로 호출됩니다. 이것은 Ajax 이벤트입니다. 완전한

(jqXHR, textStatus)

함수

이 요청이 완료 (성공 오류 후 콜백이 실행될) 때 호출된다. 이 함수는 두 개의 인수, 즉 jqXHR (jQuery 1.4.x, XMLHTTPRequest) 객체와 요청의 상태를 분류하는 문자열 ("성공", "변경되지 않음", "오류", "시간 초과", "중단"또는 "parsererror"). jQuery 1.5부터 완전한 설정은 일련의 함수를 수용 할 수 있습니다. 각 함수가 순서대로 호출됩니다. 이것은 Ajax 이벤트입니다.

2

jQuery는 어떤 종류의 데이터가 응답으로 기대되는지 알고 싶어합니다. 그렇지 않으면 구문 분석 방법을 알지 못합니다.

여기에서 이전에 말했듯이 dataType = 'json' 속성을 사용하여 jQuery에 알립니다.

function getList() { 
    $.ajax({ 
     type: "GET", 
     url: 'test.php', 
     data: "", 
     dataType: "json", 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
} 

이 외에도 PHP는 html보다는 json으로 콘텐츠를 제공하는 것이 좋습니다. PHP 스크립트의 출력 전에 header('Content-type: application/json');을 설정하여 헤더를 사용합니다. 그래서 :

$names = array('john doe', 'jane doe'); 
$ids = array('123', '223'); 

$data['names'] = $names; 
$data['ids'] = $ids; 

header('Content-type: application/json'); 

echo json_encode($data); 
+0

하위 0에 액세스하려고 할 때 여전히 null 값을 얻고 있습니다. 내 PHP 파일이 출력 한 내용으로 내 질문을 업데이트했습니다. –

+0

@Howdy_McGee 지금 당신을 위해 일하고 있지만, 위의 코드를 수정하고 지금도 .ajax() 함께 작동합니다. – Mosselman

+0

@Mosselman - 전 dataType이있는 경우와없는 경우 모두 ajax 호출을 실행했습니다. 'json'이며 콜백은 여전히 ​​상자에서 구문 분석하는 방법을 알고있었습니다. [jQuery Ajax Docs] (http://api.jquery.com/jQuery.ajax/)에서 dataType : 'json'은 jQuery가 MIME 형식을 사용하여 반환 유형을 결정할 수없는 경우에 유용합니다. 대부분의 경우, 이것은 필요하지 않습니다. 이것은 OP가 직면 한 문제도 아니었다. OP는 "성공"대신 "완료된"콜백을 사용하고있었습니다. 그래도 데이터 유형을 폴백 및 통신 명확성으로 포함하는 것이 좋습니다. +1 모든 좋은 정보입니다. – jmort253