php - php mysql jQueryによる連鎖選択

原文 php jquery mysql ajax

mvc構造でチェーンされた選択されたスクリプトに問題があります
私はフォームビューを持っていて、これにはこれが含まれています:

<div class="col-md-6 col-md-offset-3">
  <form action="" method="post" role="form">
    <div class="form-group">
      <label>Nom de l'annonce:</label>
      <input class="form-control input-lg" type="text" name="reg_name">
    </div>
    <div class="form-group">
      <label>Choisi une catégorie:</label>
      <select id="first_drop" class="form-control input-lg" name="categories">
        <option disabled="disabled" selected="selected">choisi une categorie</option>
        <?php
          for ($i = 0; $i < count($dispalyCat); $i++) {
            echo'<option value="' . $dispalyCat[$i]['id'] . '">' . $dispalyCat[$i]['categorieName'] . '</option>';
          }
        ?>
      </select>
    </div>
    <span id="loading" style="display: none;">
      <img alt="Loading..." src="resources/images/loader.gif"/>
    </span>
    <div class="form-group" id="result" style="display: none">
      <label>Choisi une sou-catégorie:</label>
      <select id="second_drop" class="form-control input-lg" name="subCategories">
        <?php
          for ($i = 0; $i < count($dispalySubCat); $i++) {
            echo'<option>' . $dispalySubCat[$i]['subCategorieName'] . '</option>';
          }
        ?>
      </select>
    </div>
    <div class="form-group">
      <label>Prix:</label>
      <input class="form-control input-lg" name="reg_pass2" type="text"/>
    </div>
    <div class="form-group">
      <label>Surface:</label>
      <input class="form-control input-lg" name="reg_pass2" type="text"/>
    </div>
    <div class="form-group">
      <label>Description:</label>
      <textarea class="form-control input-lg"></textarea>
    </div>
    <div class="form-group">
      <label>Images:</label>
      <input type="file" value="Ajouter l'annonce" class="form-control input-lg" multiple="" />
    </div>
    <div class="form-group">
      <input type="submit" value="Ajouter l'annonce" class="btn btn-danger btn-lg" />
    </div>
    <input type="hidden" name="do" value="register"/>
  </form>
</div>


そして、情報はコントローラで操作され、これはコードです:

<?php
  $display = new Display('categories');
  $dispalyCat = $display->getAllData();

  $func = $_POST['func'];
  $drop_val = $_POST['drop_val'];

  if (isset($_POST['drop_val'])) {
    $display2 = new Display('subcategories');
    $dispalySubCat = $display2->getAllDataFromParentId($drop_val, 'categorieId');
  } 

  include 'views/ajouterAnnonce.php';
?>


そしてjqueryスクリプトは:

$(document).ready(function () {
    "use strict";
    $('#loading').hide();
    $('#first_drop').change(function () {
        $('#loading').show();
        $('#result').hide();
        $.post('addAds.php',  {
        drop_val: $('select[name=categories]').val()
      }, function (response) {
          $('#result').fadeOut();
          setTimeout("finishAjax('result', '" + escape(response) + "')", 400);
      });
      return false;
  });
});

function finishAjax(id, response) {
    "use strict";
    $('#loading').hide();
    $('#' + id).html(unescape(response));
    $('#' + id).fadeIn();
}


このコードをテストし、最初の選択からオプションを選択したときに、クラスDisplayが3行目(2番目のコード)に見つからないというエラーメッセージが表示されましたが、最初の選択で機能し、データベース内のすべてのカテゴリを表示しています
問題はどこだ ?
答え
問題を2つの部分に分けます。

1.-サーバー側:

//ファイルphp内

<?php 
    // get values from url, because for a query from a select, is not necessary use request POST
    // then
    echo $.GET['value'];
    // Here you use queries or you do procedures for obtain data related with $.GET['value']
    // Last you return data on format Json
?>

// This file php, has a url, for example: get_data_select.php 
// Then whitout jquery or javascript, you should test the url, on the browser.
// http://somedomain/get_data_select.php?value=12
// If it return data with header json. server side works good.


2.-クライアント側:選択を変更します

$('#idselect').on("change", function(){
  var values = '?value=' + $('#idselect').val();
  $.get('http://somedomain/get_data_select.php' + values, function(res){
    console.log("response", res);
    callFunctionRender(res);
  });   
});


function callFunctionRender(data) {
 // here You have data from server
// then you should rendered
};
関連記事

php - ISO 8601の日付/時刻がHTTP経由で送信され、PHPのDateTimeオブジェクトに作成されたときのエラー

php - 列の結果を変数に格納する

nginx - Nginx + php-fpmでファイルが見つかりません

php - mysqlでの結合操作とともに、3つの列(city + streetaddress + state)の値に基づいて類似の住所レコードを選択します

php - mod_rewrite:複数のパラメーターを持つフォームURLを短いパラメーターに変換します(中間部分なし)

php - 更新時の検証の誤動作

php - このMySQL外部選択がクエリの速度を低下させる理由を理解する

php - Modxのユーザー拡張フィールドにデフォルト値を設定する

php - PHP / MySQLiの複数のSQLオブジェクト

php - CentOSにPHP FileInfoモジュールをインストールする方法