使用Cakephp在json POST请求上获取错误

时间:2011-08-18 01:10:09

标签: php javascript json cakephp

我对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;
    }
}

非常感谢任何帮助。

2 个答案:

答案 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而你可能只是因为没有视图而在你的回复中出现错误..