2012-08-17 34 views
0

大家要生成一個動態下拉的城市,每個國家的CakePHP的2.2應用程序的選擇。我對cakephp很陌生。另外,我幾乎找不到任何教程,因爲它們大多用於1.3或1.2版本。我在配置文件添加視圖中爲國家和城市提供了下拉菜單。下面是我的國家,雖然控制器代碼:動態下拉使用CakePHP和jQuery

public function citylist() { 
     $this->layout=false; 
     Configure::write('debug', 0); 
     if($this->request->is('ajax')){  
     $country=$this->Country->read(null, $this->request['url']['country_id']); 
     $code=$country['Country']['country_code']; 
     $cities=$this->Country->City->find('list',array('conditions' =>array('City.country_code' => $code),'recursive' => -1,'fields' => array('id', 'name'))); 
     $this->set('cities',$cities); 
}} 

和我的jQuery代碼是這樣的:

$(document).ready(function(){ 
$('#ProfileCountryId').live('change', function() { 
if($(this).val().length != 0) { 
    $.getJSON('/crush/countries/citylist', 
       {country_id: $(this).val()}, 
       function(cities) { 
       if(cities !== null) { 
        populateCityList(cities); 
       } 
    }); 
    } 
}); 
}); 

     function populateCityList(cities) { 
var options = ''; 

$.each(cities, function(index, city) { 
options += '<option value="' + index + '">' + city + '</option>'; 
}); 
$('#ProfileHomeLocation').html(options); 
$('#city-list').show(); 
} 

我試圖使變化,但讓人有些困惑在DIFF例子我看得非常差異的方式。 我不確定檢查請求類型是否爲ajax或者我應該通過request-> data或params [url]獲取參數值。

我跟着這兩個現有的答案,並進一步搞糊塗了。 cakephp pass dropdown value in ajax The connection was reset issue in CakePHP 2.2

錯誤奇怪的是,第一次頁面加載它顯示在控制檯錯誤「無法加載資源:服務器500(內部服務器錯誤)的狀態迴應」。 但是,如果我加載重新加載,然後選擇下拉中的第一個值。它給錯誤

GET (內部服務器錯誤)jQuery.ajaxTransport.sendjquery-1.7.2.js:8240 jQuery.extend.ajaxjquery-1.7.2.js:7719 jQuery.each.jQuery 。(匿名 函數)jquery-1.7.2.js:7245 jQuery.extend.getJSONjquery-1.7.2.js:7262(匿名 函數)citylist.js:4 jQuery.event.dispatchjquery-1.7.2.js :3332 jQuery.event.add.elemData.handle.eventHandle

不知道該做什麼更進一步。

回答

0

在像您的情況下,涉及動態下拉框,我使用ajax()jQuery方法檢索數據並替換select元素的全部內容。因此,而不是通過你的AJAX調用返回JSON數據,而不是你可以返回完整的HTML元素option$('myselectelement').html(data)更換select元素的內容。這工作正常。

+0

所以ü意味着我要補充這個 「 '<選項值=」' +指數+ ' 「>' +城市+ '';」在控制器內的東西,並設置一個最終的字符串比數組! 對於cakephp 2.x例如 – 2012-08-17 13:28:16

+0

,如果你可以給出任何exapmle或給出任何鏈接,那麼這將非常棒。它並不一定是CakePHP特有的。一些代碼:'.ajax({url:'myurl',data:{...}})。done(function(data){$('#mySelectElementId')。html(data);});'和所述myurl應該從CakePHP的一個控制器的動作,其產生和返回使用'回聲$ myHTMLOutput HTML輸出(一個字符串實際上);'代替'返回$ myHTMLOutput;' – 2012-08-17 13:33:35

+0

實際上的問題是與參數的值的傳遞。我嘗試使用2.2版本的更改方法,它的工作正常。雖然我接受你的答案,因爲它給了我想法,傳遞單個字符串,因此我能夠發現Jquery函數工作正常。 – 2012-08-18 08:50:54