2017-05-29 5 views
0

私は選択された州の都市の依存選択ボックスを持っています。フォームを送信した後にCakephpで依存するボックスが空になる

問題なく機能します。フォームを送信した後、都市選択ボックスは空になります。

フォームを送信した後、選択ボックスにどのように入力することができますか。

私はCakePHP 2.5を使用しています。

フォームを送信した後に都市選択ボックスの値が表示されますが、フォームが送信された後に再び入力する方法がわかりません。

if ($this->request->is('ajax')); 
{ 

      $this->set('stateCities', $this->request->data['stateCities']); 
} 


//controller 
public function getCitiesByStateAjax() 
{ 

    $this->autoRender = false; 
    $this->autoLayout = false; 

    $city_id = $this->data['city']; 

    $this->loadModel('city'); 
    $citiesList = $this->UsuarioSimulador->listCitys($city); 

    $citiesList = Hash::combine(
     $citiesList, '{n}.city.id', array('%s', '{n}.city.name') 
    ); 

    echo json_encode($citiesList); 

} 


//form 

debug($estateCities); 

echo $this->Form->input('City.city', array('label'=>'City', 
                'type' => 'select', 
                'empty'=>'- select one -', 
                'options' => $stateCities, 
                'data-webroot' => $this->webroot) 
         ); 

//Ajax javascript code : 
    $(function() { 

     $(document).on('change', "select#State", function() 
     { 
      var url = '<?php echo Router::url(array('controller' => 'cities', 'action' => 'getCitiesByStateAjax'));?>'; 

      var data = { 
       State: $(this).val() 
      }; 

      $.ajax({ 

       url: url, 
       method: 'POST', 
       data: data, 
       dataType: 'json', 

       beforeSend: function(xhr) { 
        $.blockUI({ 
         message: '<h2>Search</h2>' 
        }); 
       }, 
       complete: function() { 
        $.unblockUI(); 
       }, 
       success: function ($response, a, b) 
       { 
        if(b.status == 200) { 
         var $optionsCity = $("#Cities").html($("<option />").val('').text('- select -')); 

         if($response) { 
          $optionsCity.prop("disabled", false); 

          $.each($response, function(idestate, value) { 
           var $opt = new Option(value, idestate); 

           $optionsCity.append($opt); 
          }); 
         } else { 
          $optionsCity.prop("disabled", true); 
         } 

        } else { 
         alert($response); 
        } 
       }, 
       error: function(x, t, m) { 
        var msg = 'Ocorreu um erro inesperado. '; 

        if(t === "timeout") { 
         msg += "Aguarde 30 segundos e tente novamente!"; 
        } else { 
         msg = t; 
        } 

        alert(msg); 
       } 
      }); 
     });   

答えて

0

私はCake Frameworkを認識していませんが、私はあなたに従うべき論理を教えてあげます。リターンはあなたのJavaScriptでそれを解析する必要がJSONであることから、第二に

$cities = array 
(
    array('id' => 1, 'value' => 'London'), 
    array('id' => 2, 'value' => 'Rio de Janeiro'), 
    array('id' => 3, 'value' => 'Berlin') 
); 

echo json_encode($cities); 

まず、あなたのコントローラでは、あなたはid、街のvalueが含まれている多次元配列を返す必要がありますファイル。

var json = JSON.parse(response); 

最後に、ループするだけです。

var html = ''; 

$.each(json, function(i, city) 
{ 
    html += '<option value="' + city.id + '">'; 
    html +=  city.value; 
    html += '</option>'; 
}); 

$('#cities').html(html); 
関連する問題