динамическое выпадающее меню с cakephp и Jquery

Привет всем, вы хотите создать динамическое раскрывающееся меню для городов в соответствии с выбором страны в приложении cakephp 2.2. Я новичок в cakephp. Более того, я почти не нахожу учебников, потому что они в основном для версии 1.3 или 1.2. У меня есть выпадающие меню для страны и города в профиле добавления представления. Вот мой код в контроллере стран:

  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();
}

Я пытался внести изменения, но это действительно сбивает с толку, так как в примерах различий я вижу очень разные способы. Я не уверен, следует ли проверять этот тип запроса как ajax или мне следует получить значение параметра через запрос-> данные или params [url].

Я следовал этим двум существующим ответам, и это еще больше смутило меня. выпадающее значение для передачи cakephp в ajax Проблема сброса соединения в CakePHP 2.2.

Странная ошибка, что при первой загрузке страницы в консоли отображается ошибка «Не удалось загрузить ресурс: сервер ответил со статусом 500 (внутренняя ошибка сервера)». Однако, если я загружаю перезагрузку, а затем выбираю первое значение в раскрывающемся списке. Это дает ошибку

ПОЛУЧИТЬ http://example.com/crush/countries/citylist?country_id=103 500 (внутренняя ошибка сервера) 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

Не знаю, что делать дальше.


person Diablo Geto    schedule 17.08.2012    source источник


Ответы (1)


В таких случаях, как ваш, когда задействован динамический раскрывающийся список, я использую метод jQuery ajax() для извлечения данных и замены всего содержимого элемента select. Таким образом, вместо того, чтобы возвращать данные JSON через ваш вызов AJAX, вместо этого вы можете вернуть полные элементы HTML option и заменить содержимое элемента select на $('myselectelement').html(data). Это прекрасно работает.

person Vasilis Lourdas    schedule 17.08.2012
comment
так что вы имеете в виду, что я должен добавить это '‹option value=' + index + '›' + город + '‹/option›'; вставьте в контроллер и установите окончательную строку, а не массив !! Будет здорово, если вы можете привести какой-либо пример или дать любую ссылку, например, для cakephp 2.x. - person Diablo Geto; 17.08.2012
comment
Это не обязательно должно быть специфично для CakePHP. Некоторый код: $.ajax({ url: 'myurl', data: {...}}).done(function(data){ $('#mySelectElementId').html(data); }); и myurl должны быть действием контроллера от CakePHP, которое генерирует и возвращает вывод html (фактически строку), используя echo $myHTMLOutput; вместо return $myHTMLOutput; - person Vasilis Lourdas; 17.08.2012
comment
На самом деле проблема была с передачей значения параметра. Я попытался использовать измененный метод для версии торта 2.2, и он отлично работает. Хотя я принимаю ваш ответ, так как он дал мне идею передать одну строку, и поэтому я смог обнаружить, что функция Jquery работает нормально. - person Diablo Geto; 18.08.2012