2012-09-22 2 views
1

Javascript/jQuery를 통해 사용 된 휴대폰에 대한 정보를 수집하는 재 판매자 사이트에서 작업하고 있습니다.AJAX 및 CakePHP 2.x를 통해 DB에서 데이터를 가져 오기

내가 나에게 수 내 QuotesController에 적절한 방법을 만드는 방법을 알아 내려고 오전 : 1) 그래서, 견적 데이터를 반환) jQuery를/AJAX 2를 사용하여 AJAX "POST"를 사용하여 전화 jQuery를 함수 호출 : QuotesController에서

var data = 
    { 
     device_id: quote['device_id'], 
     carrier_id: quote['carrier_id'], 
     condition_id: quote['condition_id'], 
     size: quote['size'] 
    }; 

    // Pull quote using AJAX 
    $.ajax({ 
     type: "post", 
     url: "/c4c/quotes/get_quote", 
     data: data, 
     dataType: 'json', 
     success: function(data, textStatus, jqXHR){ 
      alert('success'); 
      alert(jqXHR.responseText); 
      $('#quote').html(jqXHR.responseText); 
     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      alert('error'); 
      alert(jqXHR.responseText); 
      $('#quote').html(jqXHR.responseText); 
     } 
    }); 

방법 :

 // Gets a quote's price via ajax 
    public function get_quote(){ 
    $this->layout = 'ajax'; 

    $device_id = $this->request->data['device_id']; 
    $carrier_id = $this->request->data['carrier_id']; 
    $condition_id = $this->request->data['condition_id']; 
    $size = $this->request->data['size']; 

    // Get quote 
    $quote = $this->Quote->find('first', array('conditions'=>array('Quote.device_id'=>$device_id, 
                    'Quote.carrier_id'=>$carrier_id, 
                    'Quote.condition_id'=>$condition_id, 
                    'Quote.size'=>$size, 
                    ))); 

    $this->set('quote',$quote); 

    //$this->render('get_quote'); 
    return json_encode($quote); 
} 
을 나는 여기에 지금까지 가지고 무엇을 사용자

에 가격을 표시 할 수 있습니다

오류가 계속 발생하므로 내가하는 일이 잘못되었다는 것을 알고 있지만 CakePHP 사이트 나 Google을 통해 답변을 찾을 수없는 것 같습니다.

도움이 될 것입니다.

+0

어떤 오류가 발생합니까? –

답변

0

상황에 빠른 수정 프로그램은 다음과 같습니다

는 첫째 return json_encode($quote);을하지 않는다 - 아약스 응답 뷰 파일을 만듭니다. 그것은 : App/View/Quotes/Ajax/get_quote.ctp에 위치해야합니다.

그런 다음 응답 변수를 설정 : $this->set('quote', $quote);

당신은 또한 당신이 사용하고있는 의심의 기본 아약스 레이아웃은 단지 빈 레이아웃 때문에 일부 헤더를 설정해야합니다. 당신은 기본 PHP header() 기능을 수행 할 수 있습니다 App/View/layouts/ajax.ctp

:의 레이아웃 파일을 만들기에는 캐시가 아약스 데이터를 전혀이 없도록

header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate"); 
header('Content-Type: application/json'); 
echo $content_for_layout; 

캐시 제어 헤더가 있습니다. 요청/응답 모니터링 도구 (수행 중이어야 함)를 사용 중이라면 응답이 JSON으로 직접 식별됨을 알게 될 것입니다. 그런 다음보기에 당신은 할 수 있습니다

echo json_encode($quote); 

이것은 당신이 제공하는 부족한 정보를 기반으로, 경우에있어,하지만 어떻게 CakePHP의에서 '는 JSON/아약스 작업을 수행하는 것이 가장 바람직합니다'해결해야합니까? 다음은 몇 단계입니다.

  1. 사용 Router::parseExtensions(); 쉽게를 통해 들어오는 어떤 요청을 식별하려면 다음에 무슨 일이 일어날 지
  2. 확인 RequestHandlerComponent의 isXml() (또는이다 ('아약스')) 방법
  3. 를 사용하여 데이터보기 (JSON and XML views)을 사용하여 응답을 렌더링합니다. 여기에 두 개의 선택 항목이 있습니다. data views with the serialize key을 사용하거나 data view with view files을 사용하십시오. 선택은 당신의 책임입니다.
  4. 중앙 Ajax 레이아웃을 사용하고 원하는 헤더를 RequestHandlerComponent::setContent($name, $type = null) - take a look here으로 설정하십시오. 컨트롤러의 beforeFilter()에서 setContent()를 호출해야합니다.
관련 문제