Получение ошибки на JSON POST-запрос с Cakephp - PullRequest
0 голосов
/ 18 августа 2011

Я относительно новичок в 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 ]

1 голос
/ 18 августа 2011

Будет хорошо, если вы переместили часть 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

0 голосов
/ 18 августа 2011

См. Принятый ответ на этот вопрос , он подчеркивает правильный "торт" способ доставки JSON в вашем приложении.

Просто эхо в вашем контроллере не очень MVC, и вы, вероятно, просто получаете ошибки в своем ответе из-за отсутствия просмотра ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...