我对Cakephp相对较新,不幸的是必须为此项目使用它。我遇到的问题是我的POST请求返回错误,即使我正在正确回显json字符串。
这是我的html和嵌入式javascript
<div class="submit">
<input type="submit" onclick="results();" id="submit"></submit>
</div>
<script type="text/javascript">
function results() {
var data = $('#ListingResultsForm').serialize();
$.ajax({
type: 'post',
url: '/listings/results',
data: data,
dataType: 'json',
success: function(data, textStatus, jqXHR) {
console.log(textStatus);
console.log(jqXHR);
console.log(data);
},
error: function(textStatus, errorThrown, jqXHR) {
console.log(textStatus);
console.log(jqXHR);
console.log(errorThrown);
}
});
return false;
}
这是我的控制器
function results() {
$this->layout = 'ajax';
$this->autoLayout = false;
$this->autoRender = false;
$conditions = array();
if (!empty($this->data)) {
($this->data['Listing']['listing_countyid'] !== '') ? $conditions['listing_countyid'] = $this->data['Listing']['listing_countyid'] : '';
($this->data['Listing']['listing_area'] !== '') ? $conditions['listing_area'] = $this->data['Listing']['listing_area'] : '';
($this->data['Listing']['listing_neighborhood'] !== '') ? $conditions['listing_neighborhood'] = $this->data['Listing']['listing_neighborhood'] : '';
($this->data['Listing']['min_price'] !== '') ? $conditions['listing_listprice >='] = $this->data['Listing']['min_price'] : '';
($this->data['Listing']['max_price'] !== '') ? $conditions['listing_listprice <='] = $this->data['Listing']['max_price'] : '';
($this->data['Listing']['min_listing_sqfttotal'] !== '') ? $conditions['listing_sqfttotal >='] = $this->data['Listing']['min_listing_sqfttotal'] : '';
($this->data['Listing']['max_listing_sqfttotal'] !== '') ? $conditions['listing_sqfttotal <='] = $this->data['Listing']['max_listing_sqfttotal'] : '';
($this->data['Listing']['min_stories'] !== '') ? $conditions['listing_stories >='] = $this->data['Listing']['min_stories'] : '';
($this->data['Listing']['listing_yearbuilt'] !== '') ? $conditions['listing_yearbuilt >='] = $this->data['Listing']['listing_yearbuilt'] : '';
($this->data['Listing']['min_bathrooms'] !== '') ? $conditions['listing_bathstotal >='] = $this->data['Listing']['min_bathrooms'] : '';
($this->data['Listing']['max_bathrooms'] !== '') ? $conditions['listing_bathstotal <='] = $this->data['Listing']['max_bathrooms'] : '';
($this->data['Listing']['min_bedrooms'] !== '') ? $conditions['listing_bedrooms >='] = $this->data['Listing']['min_bedrooms'] : '';
($this->data['Listing']['max_bedrooms'] !== '') ? $conditions['listing_bedrooms <='] = $this->data['Listing']['max_bedrooms'] : '';
($this->data['Listing']['level1_mstr'] !== '') ? $conditions['listing_roommasterbrlevel'] = $this->data['Listing']['level1_mstr'] : '';
($this->data['Listing']['level1_laundry'] !== '') ? $conditions['listing_roomlaundrylevel'] = $this->data['Listing']['level1_laundry'] : '';
($this->data['Listing']['heat_type'] !== '') ? $conditions['listing_heatsystem'] = $this->data['Listing']['heat_type'] : '';
($this->data['Listing']['cool_type'] !== '') ? $conditions['listing_coolsystem'] = $this->data['Listing']['cool_type'] : '';
($this->data['Listing']['irrigation_system'] !== '') ? $conditions['listing_irrigationsrc'] = $this->data['Listing']['irrigation_system'] : '';
($this->data['Listing']['fireplace'] !== '') ? $conditions['listing_fireplaces'] = $this->data['Listing']['fireplace'] : '';
($this->data['Listing']['handicap'] !== '') ? $conditions['listing_handicap'] = $this->data['Listing']['handicap'] : '';
($this->data['Listing']['fence'] !== '') ? $conditions['listing_fence'] = $this->data['Listing']['fence'] : '';
$items = $this->Idx->find('all', array('conditions'=> $conditions));
$this->header('Content-Type: application/json');
echo json_encode($items);
return;
}
}
非常感谢任何帮助。
答案 0 :(得分:1)
如果您移动json部分以查看类似
的内容将会很好在视图中
//in listings/results.ctp
header('Content-Type: application/json');
echo json_encode($items);
在控制器中(跳过一些代码)
function results() {
$this->layout = 'ajax';
$this->autoLayout = false;
$conditions = array();
Configure::write('debug',0);
$items = array();
if (!empty($this->data)) {
($this->data['Listing']['listing_countyid'] !== '') ? $conditions['listing_countyid'] = $this->data['Listing']['listing_countyid'] : '';
..........
...........
$items = $this->Idx->find('all', array('conditions'=> $conditions));
}
$this->set(compact('items'));
}
确保添加了行号。 5
答案 1 :(得分:0)
查看this question的已接受答案,它突出显示了在您的应用中提供json的正确“蛋糕”方式。
简单地在你的控制器中回显并不是非常MVC而你可能只是因为没有视图而在你的回复中出现错误..