Getting an error on json POST request with Cakephp
I'm relatively new to Cakephp and unfortunately have to work with it for this project. The problem that I am having is my POST request is returning an error even though I am echoing a json string properly.
Here is my html and embedded 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;
}
And here is my controller
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'] !== '') ? $condi开发者_运维技巧tions['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;
}
}
Any help is greatly appreciated.
It will be good if you moved the json part to view something like
In view
//in listings/results.ctp
header('Content-Type: application/json');
echo json_encode($items);
In controller (skipped some code)
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'));
}
Make sure you added line no. 5
See the accepted answer to this question, it highlights the proper "Cake" way of delivering json in your app.
Simply echo'ing in your controller is not very MVC and you are probably just getting errors in your response due to not having a view..
精彩评论