动态AJAX列表未发布

时间:2012-04-03 11:01:35

标签: php ajax submit

我有一个动态下拉框,调用另一个PHP页面。我已经让它按照我想要的方式工作了。

以下是表格的一部分:

<tr>
 <td> 
       <p> Select a delivery date </p>
 </td> 
 <td>
     <select name='listdate' onchange='showDelivery(this.value)'>
       <option value=''>select delivery type:</option>
       <option value='forwardorder'>Forward Order</option>
       <option value='byreturn'>By Return</option>
    </select>

  <div id='txtHint'>
    <b>Change to drop down box to display delivery date</b>
  </div>
 </td> 
</tr>

Ajax

function showDelivery(str)
{
  if (str=="")
  {
    document.getElementById("txtHint").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("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","getDelivery.php?q="+str,true);
  xmlhttp.send();
}

php脚本


$q=$_GET["q"];

    // And create a cid object
    require_once $CID_INCLUDE_PATH . "/cid.php";
    $cid = new CHCID();

    if ($q == 'forwardorder') 
    {
    echo"<td><select 'name'='deliveryDate'/> "; 
    $listCapacityDates = $cid->ListCapacity();
    foreach($listCapacityDates as $x) {
    echo "<option value='".$x."'>".$x."</option> </select>"; 
    }
    } 

    if ($q == 'byreturn')
    {
    echo"<div id='div1'>Enter By Return Date<input type='text''name='deliveryDate' />
    </div>"; 
    } 

我知道这个问题,因为当表单提交没有提交这些值时,Ajax下拉列表的结果会显示在PHP页面中。但我不确定我怎么能提交它们?有任何想法吗?

2 个答案:

答案 0 :(得分:2)

echo"<td><select 'name'='deliveryDate'/> ";

应该是:

echo "<td><select name='deliveryDate'/> "; 

echo"<div id='div1'>Enter By Return Date<input type='text''name='deliveryDate' />

应该是:

echo"<div id='div1'>Enter By Return Date<input type='text' name='deliveryDate' />

    if ($q == 'forwardorder') 
    {
    echo"<td><select 'name'='deliveryDate'/> "; 
      $listCapacityDates = $cid->ListCapacity();
      foreach($listCapacityDates as $x) {
        echo "<option value='".$x."'>".$x."</option>"; 
        }
    echo "</select></td>";
    } 

</select>应该在foreach之外

答案 1 :(得分:1)

你似乎明白为什么它不起作用,而不是如何纠正它,对吧?

当您从PHP页面返回数据时,需要通过javascript处理它。 而不是返回,

echo "<option value='".$x."'>".$x."</option> </select>";

应该是json。

{ val : key, val : key }

然后Javascript可以将其插入到HTML DOM中,然后您的表单会在您提交表单时重新确定值。

至于Javascript代码,有几种方法,jQuery有一些插件可以处理它。 否则我可以挖掘一些代码,如果有人不打扰我的话:) :( / p>)



编辑:
在手边,我认为这段代码应该有用 这是未经测试的,但希望能更多地了解如何使用它 取代

document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

var response = xmlhttp.responseText;
var select = document.getElementByName('listdate');
var option;

for(var i=0; i<response.length; i++)
 {
    option = document.createElement("OPTION");
    option.text = response.key[i];
    option.value = response.val[i];

    select.options.add(option);
}