【问题标题】:AJAX PHP : Dynamic drop down list using AJAXAJAX PHP:使用 AJAX 的动态下拉列表
【发布时间】:2015-05-03 19:04:29
【问题描述】:

今天,我编写了一个包含动态下拉列表的表单。

任务:当用户选择类别时,我想制作动态下拉列表,然后会出现该类别的商店。

它的形式是:

<select name="category" class="form-control" id="category" onchange="ajaxStore(this.value)">
   <option value="-1"> - Choose Category -</option>
      <?php
           $StoreCategoriesAPIAccessor = new StoreCategoriesAPIService(GuzzleClient::getClient());
           $stores = $StoreCategoriesAPIAccessor->getStoreCategories();
           foreach ($stores as $store):      
      ?>
   <option value="<?php echo $store->getStoreCategoryId(); ?>"><?php echo $store->getCategory(); ?></option>
      <?php endforeach; ?>
</select>

<label for="inputName" class="control-label">Store Name</label>
  <select name="store" class="form-control" id="store">
     <option value="-1"> - Choose Store -</option>
  </select>

这是 AJAX:

<!-- linking drop down AJAX -->
    <script type="text/javascript">
      var ajaxku=buatajax();
      function ajaxStore(id){
        var url="objects/StoreAPIService.php?category="+id+"&sid="+Math.random();
        ajaxku.onreadystatechange=stateChanged;
        ajaxku.open("GET",url,true);
        ajaxku.send(null);
      }

      function buatajax(){
        if (window.XMLHttpRequest){
          return new XMLHttpRequest();
        }
        if (window.ActiveXObject){
          return new ActiveXObject("Microsoft.XMLHTTP");
        }
        return null;
      }

      function stateChanged(){
        var data;
        if (ajaxku.readyState==4){
          data=ajaxku.responseText;
          if(data.length>=0){
            document.getElementById("store").innerHTML = data
          }else{
            document.getElementById("store").value = "<option selected>- Choose Store -</option>";
          }
        }
      }
    </script>

这是 StoreAPIService.php 的代码:

session_start();
        $stores = array();

        $store_category_id = $_GET['category'];

        try 
        {
            //$client = new GuzzleClient();
            $response = $this->client->get('admin/store/bycat/rev/'.$store_category_id,
                ['headers' => ['Authorization' => $_SESSION['login']['apiKey']]
            ]);

            $statusCode = $response->getStatusCode();
            // Check that the request is successful.
            if ($statusCode == 200) 
            {
                $error = $response->json();
                echo"<option value=''>- Choose Store -</option>";

                foreach ($error['stores'] as $store) 
                {
                    $mainStore = new StoreSummary();
                    echo "<option value='{$mainStore->setStoreId($store['store_id'])};'>{$mainStore->setStoreName($store['store_name'])};</option>";
                    array_push($stores, $mainStore);
                }
            }
        }

我没有收到任何错误,但我选择的带有“类别”的商店没有出现。

谁能检查我是否出错了。

感谢您的帮助。

【问题讨论】:

  • 转到开发者工具,进入网络选项卡,然后检查 AJAX 调用的响应部分,看看你得到了什么。

标签: php ajax


【解决方案1】:

您试图更改下拉菜单的选项。我通过更改下拉菜单本身来做到这一点。
我在 html 表单中创建了一个 id="store" 的 div,并使用 ajax 更改了 div 的 innerHTML

html表单

    <select name="category" class="form-control" id="category" onchange="ajaxStore(this.value)">
       <option value="-1"> - Choose Category -</option>
          <?php
               $StoreCategoriesAPIAccessor = new StoreCategoriesAPIService(GuzzleClient::getClient());
               $stores = $StoreCategoriesAPIAccessor->getStoreCategories();
               foreach ($stores as $store):      
          ?>
       <option value="<?php echo $store->getStoreCategoryId(); ?>"><?php echo $store->getCategory(); ?></option>
          <?php endforeach; ?>
    </select><label for="inputName" class="control-label">Store Name</label>
      <div id="store"><select name="store" class="form-control">
     <option value="-1"> - Choose Store -</option>
  </select>
</div> <!--end of store -->

ajax 代码

<!-- linking drop down AJAX -->
    <script type="text/javascript">
      var ajaxku=buatajax();
      function ajaxStore(id){
        var url="objects/StoreAPIService.php?category="+id+"&sid="+Math.random();
        ajaxku.onreadystatechange=stateChanged;
        ajaxku.open("GET",url,true);
        ajaxku.send(null);
      }

      function buatajax(){
        if (window.XMLHttpRequest){
          return new XMLHttpRequest();
        }
        if (window.ActiveXObject){
          return new ActiveXObject("Microsoft.XMLHTTP");
        }
        return null;
      }

      function stateChanged(){
        var data;
        if (ajaxku.readyState==4){
          data=ajaxku.responseText;
          if(data.length>=0){
            document.getElementById("store").innerHTML = data
          }else{
            document.getElementById("store").value = "<select name=\"store\" class=\"form-control\">
         <option value=\"-1\"> - Choose Store -</option>
      </select>";
          }
        }
      }
    </script>

StoreAPIService.php:

    session_start();
            $stores = array();

            $store_category_id = $_GET['category'];

            try 
            {
                //$client = new GuzzleClient();
                $response = $this->client->get('admin/store/bycat/rev/'.$store_category_id,
                    ['headers' => ['Authorization' => $_SESSION['login']['apiKey']]
                ]);

                $statusCode = $response->getStatusCode();
                // Check that the request is successful.
                if ($statusCode == 200) 
                {
                    $error = $response->json();
                    echo "<select name=\"store\" class=\"form-control\">
<option value=\"\">- Choose Store -</option>";

                    foreach ($error['stores'] as $store) 
                    {
                        $mainStore = new StoreSummary();
                        echo "<option value='{$mainStore->setStoreId($store['store_id'])};'>{$mainStore->setStoreName($store['store_name'])};</option>";
                        array_push($stores, $mainStore);
                    }//end of foreach
                  echo "</select>"
                }
            }

【讨论】:

  • 嗨,兄弟,感谢您的回复,但它仍然无法正常工作.. 商店下拉列表中的结果仍然 - 选择商店 - 你能帮我吗?
  • 看看这个兄弟并尝试将这段代码一步一步集成到你的脚本中link
猜你喜欢
  • 2013-11-14
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多