开发者

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..

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜