我正在开发一个重新商务网站,通过Javascript / jQuery从用户那里收集有关旧手机的信息。
我试图找出如何在我的QuotesController中创建一个允许我的正确方法: 1)使用jQuery / AJAX使用AJAX“post”调用它 2)返回报价数据,以便我可以向用户显示价格
这是我到目前为止所拥有的: jQuery函数调用:
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);
}
});
QuotesController中的方法:
// 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的网站上找到任何答案,也无法通过谷歌找到答案。
非常感谢任何帮助!
答案 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标头就在那里,因此ajax数据没有任何缓存。 如果您正在使用请求/响应监视工具(您应该这样做),您会注意到它现在直接将响应标识为JSON。 然后在您的视图中,您可以:
echo json_encode($quote);
根据您提供的稀缺信息,这可以解决您的情况,但是如何在CakePHP中做“json / ajax”最好?这是几个步骤。
RequestHandlerComponent::setContent($name, $type = null)
- take a look here设置您喜欢的任何标头。
请注意,应在控制器的beforeFilter()中调用setContent()。