2013-03-27 5 views
3

jquery 1.9.1 ajax + icanhaz/콧수염의 작동 예제를 만들려고합니다. 이건 내 템플릿입니다 :jquery ajax 응답 유형

<script id="user" type="text/html"> 
    {{#users}}<li>Username: {{ username }}, fullname: {{ fullname }}</li>{{/users}} 
</script> 

이 내 자바 스크립트입니다 :

$(document).ready(function() { 
    $("#user-btn").click(function() { 
     $.ajax({ 
      type: "GET", 
      url: "../php/client/json.php", 
      data: { 
       type: "users" 
      } 
     }).done(function(response) { 
      var element = $('#dialog-message'); 
      element.html("<ul>"); 
      element.append(ich.user(response)); 
      element.append("</ul>"); 
     }); 
}); 

이 주소에서 AJAX 응답이 같은 외모 : 다음 코드와

{"users":[{"username":"jd","fullname":"John Doe"},{"username":"jl","fullname":"John Lennon"}]}; 

을 icanhaz는 렌더링 할 수 없습니다 나를위한 것. 나는 자바 스크립트 콘솔과 함께 시간을 보냈고 typeof responsestring이고 내가 object 일 것을 알았다. Icanhaz는 또한 객체를 기대합니다. 이것이 올바른 응답을 렌더링하지 못하는 이유입니다.

내가 뭔가 잘못하고 있거나 jquery.ajax가 문자열 응답을 항상 반환한다는 것을 모르는 불쌍한 초보자입니까? 그렇다면 어떻게 처리해야합니까?

답변

7

AJAX 통화에서 string이 반환되는 경우 dataType: "json"을 추가해야합니다. 가능한 경우 JSON으로 응답을 구문 분석합니다.

$(document).ready(function() { 
    $("#user-btn").click(function() { 
     $.ajax({ 
      type: "GET", 
      url: "../php/client/json.php", 
      data: { 
       type: "users" 
      }, 
      dataType: "json" 
     }).done(function(response) { 
      ... 
     }); 
}); 

은 반드시 당신의 ich.user 방법은 단 하나의 사용자 개체 사용자의 배열을 기대하지 있습니까?

+0

네를, 나는 확신 [또 다른 질문 (http://stackoverflow.com/questions/15650487/icanhaz- 콧수염 - 루프 - 반복 - 요소 - js- 오류/15652623)). – ducin

+0

OK ... 다행입니다. 함수 이름이 이상하게 보였기 때문에 나는 그것을 언급했다고 생각했다. :) – Steve

2

$.ajax에 대해 dataType: "json" 옵션을 사용해보십시오.

2

클릭 기능 수정 : 내가 볼 (그들을 통해 반복하고 있습니다 때문에

$("#user-btn").click(function() { 
    $.ajax({ 
     type: "GET", 
     url: "../php/client/json.php", 
     data: { 
      type: "users" 
     }, 
     dataType: 'json', 
     success: function (data) { 
      // Your code... 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
      alert(textStatus); 
     } 
    }); 
}); 
+1

'done' (당신은'success'와'error'로 바꿨습니다)에 무엇이 잘못되었는지 설명 할 수 있습니까? – ducin

+1

'success'와'error'는 앞으로 제거 될 수 있기 때문에 더 이상 사용하지 않는 것이 좋습니다. '다'는 갈 길입니다. –

+0

아무 문제가 없지만 이것은 jQuery 아약스 호출 대부분에서 사용하고 있으므로 훨씬 더 나은 접근법입니다! 그리고 그들은 완벽하게 잘 작동합니다! –