2012-09-22 133 views
1

我正在致力於一個再商務網站,該網站通過Javascript/jQuery收集用戶使用手機的信息。通過AJAX和CakePHP 2.x從數據庫中提取數據

我試圖找出如何我可以在我的QuotesController適當的方法,讓我: 1)使用AJAX「後」使用jQuery/AJAX 2)返回的報價數據呼叫,所以我可以顯示的價格向用戶

這是我到目前爲止有: 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); - 創建Ajax響應一個視圖文件。它應該位於:App/View/Quotes/Ajax/get_quote.ctp

然後設置響應變量: $this->set('quote', $quote);

您還需要設置一些標題,因爲默認的AJAX佈局我懷疑你使用的是一個空的佈局。創建一個佈局文件:App/View/layouts/ajax.ctp

您可以用基本的PHP header()功能做到這一點:

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

的Cache-Control頭是有這麼不存在任何緩存阿賈克斯的數據。 如果您使用請求/響應監控工具(您應該這樣做),您會注意到現在它直接將響應標識爲JSON。 然後在您的視圖,您可以:

echo json_encode($quote); 

這應該可以解決你的情況下,根據您提供的信息很少,但如何「是最好做的JSON/AJAX」在CakePHP中?這裏有幾個步驟。

  1. 使用Router::parseExtensions();可以輕鬆地確定哪些請求是通過即將在:
  2. 檢查什麼是未來與RequestHandlerComponent的isXml()(或者是('AJAX'))方法
  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()。