2014-01-30 98 views
1

我知道你們可能已經回答了大量問題,但我真的需要一些幫助。 我找不到適合我的任何答案。CakePHP - 更新下拉列表

我有2名下拉列表的形式(表格ID MapInitForm):

  • 區:,已填充

  • 地區:我區(zoneSelect ID)的列表:我的領土清單(編號:territorySelect

我的地區表中有一個zone_id

所以當我選擇一個區域時,我需要獲取所有關聯的區域。當我選擇一個領域時,我需要做一些PHP的東西;

編輯感謝馬克的回答。

$('#MapInitForm #zoneSelect').change(function(){ 
     var zone_id = $(this).val(); 

     var zone_id = $(this).val(); 
     var targeturl = $(this).attr('rel') + '?id=' + zone_id; 
     $.ajax({ 
       type: 'get', 
       url: targeturl, 
       beforeSend: function(xhr) { 
         xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
       }, 
       success: function(response) { 
         if (response.content) { 
           $('#territorySelect').html(response.content); 
         } 
         else { 
          console.log(response.content); 
         } 
       }, 
       error: function(e) { 
         alert("An error occurred: " + e.responseText.message); 
         console.log(e); 
       } 
     }); 

    }); 

在我的控制器:

public function zone_territories_ajax() { 
    $this->request->onlyAllow('ajax'); 
    $id = $this->request->query('id'); 
    if (!$id) { 
     throw new NotFoundException(); 
    } 

    $this->loadModel('Territory'); 
    $data = $this->paginate('Territory', array('Territory.zone_id =' => $id)); 
    // $data = $this->Territory->find('all', array('condition' => array('Territory.zone_id =' => $id))); 

    $this->set('zoneTerritories', $data); 
} 

筆者認爲:

$url = $this->Html->url(array('controller' => 'zones', 'action' => 'zone_territories_ajax')); 

     echo $this->Form->create('Map'); 
     echo $this->Form->input('zone_id', array(
      'options' => $zones, 
      'empty' => '--- Select one ---', 
      'id' => 'zoneSelect', 
      'rel' => $url 
      )); 
     echo $this->Form->input('zone_territory_id', array(
      'empty' => '--- Select one zone ---', 
      'id' => 'territorySelect', 
      )); 
     echo $this->Form->end();  

最後,在我的zone_territories_ajax.ctp:

if (!empty($zoneTerritories)) { 
     $k = 0; 
    foreach($zoneTerritories as $zoneTerritory): 
     echo '<option value="' . $k . '">' . $zoneTerritory['Territory']['name'] . '</option>'; 
     $k++; 
     endforeach; 
    } 
    else { 
     echo '<option value="0">' . __('noOptionAvailable') . '</option>'; 
    } 

在我的控制檯,我得到undefined for console.log(response.content); 但我得到了所選區域的正確值(我再次看到了我的控制檯中的那些值),但第二個下拉列表中沒有任何反應。

我做錯了什麼?

回答

1

你是幸運的,只是前陣子我寫了一些關於AJAX和CakePHP: http://www.dereuromark.de/2014/01/09/ajax-and-cakephp

,特別是,你可以看到的正是這樣的功能在這裏一個完整的例子: http://sandbox.dereuromark.de/sandbox/ajax_examples/chained_dropdowns

$('#source').change(function() { 
      var selectedValue = $(this).val(); 

      var targeturl = $(this).attr('rel') + '?id=' + selectedValue; 
      $.ajax({ 
        type: 'get', 
        url: targeturl, 
        beforeSend: function(xhr) { 
          xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
        }, 
        success: function(response) { 
          if (response.content) { 
            $('#target').html(response.content); 
          } 
        }, 
        error: function(e) { 
          alert("An error occurred: " + e.responseText.message); 
          console.log(e); 
        } 
      }); 
    }); 
see github

基本上 - 代碼在底部連接

+0

這段代碼示例應該自行工作嗎? – Zhob

+0

你看過這個例子和它的源代碼嗎?這應該回答你的問題。請注意所涉及的控制器的網址。 – mark

+0

馬克,請看看編輯。 – Zhob