2011-08-18 88 views
0

我对Cakephp比较陌生,不幸的是不得不为这个项目使用它。我遇到的问题是我的POST请求正在返回一个错误,即使我正确地回显json字符串。在CakePHP上获取json POST请求的错误

这里是我的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

什么这些的console.log的输出? –

+0

textStatus返回和对象和errorThrown是错误 –

+0

这里是响应头连接:保持活动 内容类型:应用程序/ json 日期:2011年8月18日星期四01:49:25 GMT Keep-Alive:timeout = 15 ,最大= 100 P3P:CP =“NOI ADM DEV PSAi COM NAV OURo STP IND DEM” 服务器:Apache/2.0.63(Unix)mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Transfer-Encoding:chunked X-Powered-By:PHP/5.2.9 –

回答

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

0

查看接受的答案this question,它强调了在您的应用中提供json的正确“Cake”方式。

在你的控制器只需echo'ing不是很MVC,你很可能只是让错误在你的反应,由于没有一个观点..