2013-01-04 6 views
1

저는 CodeIgniter 프로젝트에서 작업 중이며 ajax를 사용하여 컨트롤러에서 데이터를 반환 할 때 문제가 발생합니다.CodeIgniter Ajax 응답에 데이터가 포함되어 있지만 출력이 정의되지 않았습니다.

컨트롤러 :

function outputAjax() 
    { 
     $this->load->model('my_model'); 
     $data['results'] = $this->site_model->getInfo(); 
     $this->output->set_output(json_encode($data)); 
    } 

모델 :

function getInfo() 
{ 
    $this->db->order_by('PubDate','DESC'); 
    $query = $this->db->get('Articles', 50); 

     return $query->result(); 
} 

보기 아약스 기능 :

<div id="article-area"> 
    <p>Hey this is where the ajax call should output!</p> 

</div> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script type="text/javascript" language="Javascript"> 
jQuery(document).ready(function(){  
     $.ajax({ 
url: 'http://localhost/project/index.php/my_controller/outputAjax', 
dataType:'json', 
success: function(data) { 
    $.each(data, function(index,item){ 
     $("#article-area").append('<div><b>' + item.id + '</b></div><hr />'); 

    }); 
} 
     }); 

}); 

내가 ou는 수 tput 데이터를 PHP foreach 루프를 사용하여 벌금하지만 지금은 아약스를 사용하여 변환하려고합니다. 내가 맞으면 출력되는 데이터는 인 배열입니다. 각 '객체'에는 ID, 제목, URL, PubDate, 소스 등 과 같은 6 개의 필드가 포함됩니다.

아약스를 사용하는 데있어 새로운 것이지만 Chrome을 사용하여 '네트워크'검사를 사용하면 문제를 디버그 할 때 Ajax 호출과 응답 탭이 표시됩니다. 필요한 모든 데이터가 있습니다. 데이터가 응답에 표시됩니다 아무것도 중 하나가 페이지에 표시되지 않습니다

{"results":[{"id":"1","Source":"My Source","Title":"My Title". . . . 

때문에 또는 내가 아약스 호출을 변경하는 경우 I 출력 undefined로 그것을 얻을 수 있습니다 이런 식으로 여기에 표시된.

달성하고자하는 최종 결과는 아약스 호출의 데이터가있는 페이지에서 약 10 분의 1 div 정도입니다. 어느 쪽이 내 옆의 질문도 불러옵니다.

내 모델은 DB로부터 50 행의 데이터를 반환합니다. 나는 현재 json 형식으로 모든 것을 ajax 함수에 전달하고있다. 그 데이터의 처음 10 행만을 사용하고 그 페이지에서 결정된 시간 동안 나머지 행을 사용합니다. Ajax 호출에 50 행을 모두 계속 출력 한 다음 필요에 따라 사용하거나 모델에서 처음 사용할 데이터로만 데이터를 제한하는 것이 가장 좋습니다.

CI로 몇 개의 ajax 튜토리얼을 실행했지만 모두 POST를 사용하고 있으며 아직 document.ready와 사용자 상호 작용없이 실행중인 것을 찾으려고합니다. 나는 또한 데이터를 출력하는 몇 가지 다양한 방법이 있어야한다는 것을 알았다. 이런 식으로 사용 된 .append() .after() 및 .value()의 사용법을 보았지만 어떤 경우에도 문제가 해결되지 않는 것 같습니다 ...

감사합니다.

답변

3

데이터가 단순히 배열 인 경우 코드가 작동합니다. 그러나 데이터 배열은 객체의 속성 인 results에 포함되어 있습니다. 에

변경 each :

$.each(data.results, function(index,item){... 

또는 단순히 PHP로 results 배열

$data = $this->site_model->getInfo(); 
+0

감사를주지 않고 배열을 보내! 내가 가지고있는 문제가 해결되었습니다. 제 질문의 후반부에 어떤 의견이 있습니까? 또한, 두 가지 방법 모두 올바르게 작동하기 때문에 배열 대신 객체를 반환하려는 이유가 무엇입니까?나는 내가 어디에 있는지 알기 위해 몇 가지 다른 자습서를 따랐다. 왜 내가 원래 그 물건에 넣기로 결정했는지 확신 할 수 없다. 다시 한 번 감사드립니다! – Twhyler

+1

제한 행 문제는 다소 주관적입니다. 한 번에 모두 보내면 변수에받은 데이터를 캐싱하거나 더 많은 행을 새로 요청할 수 있습니다. 늘어나는만큼 서버 load..first 더 .. 코딩까지 간다 ... 당신을 위해 더 쉽게 할 – charlietfl

+0

모든 도움과 의견을 주셔서 다시 한번 감사드립니다! – Twhyler

관련 문제