【问题标题】:How do you retrieve values from an Ajax drop down list from a different page? PHP如何从不同页面的 Ajax 下拉列表中检索值? PHP
【发布时间】:2011-05-07 21:18:10
【问题描述】:

我已成功创建了一些级联下拉列表,但我似乎无法检索这些值。下拉列表完全是在另一个页面上创建的,我不知道为什么,但我只是假设它也会从列表中提取选择名称和选择的值。当我 print_r($_REQUEST) 时,二级和三级下拉菜单中根本没有任何信息。

第一页只是一个普通的形式,像这样:

<center><div id="country"><b>Country</b></div></center>
</td><td><center><div id="province"><b>Province</b></div></center>
</td><td>

这是 JavaScript

function showRecords(str,column,nextDiv)
{
if (str=="")
  {

  document.getElementById(nextDiv).innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {

    document.getElementById(nextDiv).innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getRecords.php?"+column+"="+str,true);
xmlhttp.send();
}

这是它从中提取下拉菜单的页面

<?
require "functions.php";


if(isset($_REQUEST['region'])){
    $region=$_REQUEST['region'];
    getDepRecords("country","regions","region",$region,"province");
    }

if(isset($_REQUEST['country'])){

    $country=$_REQUEST['country'];
    getDepRecords("province","countries","country",$country,"");
}
?> 

这是具体功能

function getDepRecords($column, $table, $depColumn, $dep, $nextDiv) {
    echo "<select name =".$column." id=".$column." 
    onchange=\"showRecords(this.value,'".$column."','".$nextDiv."')\">\n";
    $options = "";
    if (isset($_REQUEST)) {
        $selected = $_REQUEST[$column];
    }
    $query = "SELECT DISTINCT $column FROM $table WHERE 
    $depColumn = \"$dep\" ORDER BY $column ASC";
    $result = mysql_query($query);
    if (!$result) {
        $options = "<option>Error Retrieving Records</option>\n";
    }
    else {
      $options.= "<option value = ".NULL.">Select ".$column."</option>\n";
      $options.= "<option value = ".NULL."></option>\n";
        while ($row = mysql_fetch_assoc($result)) {
            $value = $row[$column];
            $options.= "<";
            $options.= "option value=\"";
            $options.= $value . "\"";
            if (isset($selected)) {
                if (($selected) == ($value)) {
                    $options.= " selected";
                }
                $options.= "";
            }
            $options.= ">";
            $options.= $value;
            $options.= "</option>\n";
        }

    }
    echo $options;
    echo "</select>";
} 

【问题讨论】:

  • 如果你能分享你的问题代码会很有帮助
  • 它所有的选项都显示得很好,但它只是没有从页面上读取用户的选择,这是代码的第一部分。
  • 我想我似乎无法在其他页面上设置下拉列表的名称。 ?
  • 它是什么“其他页面”?如果是链接问题,需要知道涉及哪些文件。对于您可以绘制它的方式,请参阅这个问题:stackoverflow.com/questions/5806703/…
  • 离题,但我建议使用 &lt;?php 而不是不推荐使用的缩写 &lt;?

标签: php javascript mysql ajax


【解决方案1】:

您的代码可能不完整,但从现有的情况来看,“普通旧表单”似乎缺少提交信息:

<td>
  <center>
    <div id="country"><b>Country</b></div>
  </center>
</td>
<td>
  <center>
    <div id="province"><b>Province</b></div>
  </center>
</td>

如果你调用了javascript函数(例如)

showRecords("canada","country","province")

选择元素被插入到相应的 div 中,但是如果没有表单和操作,就无法使用这些元素。

Client HTML       Client javascript       web server       mySQL
    |                     |                    |             |
    |----------- get form page --------------->|             |
    |<--------- returns form page -------------|             |
    |                     |                    |             |
    |----- js event ----->|showRecords runs    |             |
    |                     |-- getRecords.php ->|             |
    |                     |                    |---- SQL --->|
    |                     |                    |<--- data ---|
    |                     |<- return content --|             |
    |<--- data to user ---|ajax received       |             |
    |                     |                    |             |
    |user submits form    |                    |             |
    |----- request to where? POST or GET? ---->|process.php? |
    |                     |                    |             |
    v                     v                    v             v

如果我没有抓住重点,请告诉我们有关您的代码的更多信息。

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多