Динамический список AJAX не публикуется - PullRequest
1 голос
/ 03 апреля 2012

У меня есть динамический выпадающий список, который вызывает другую страницу 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>"; 
    } 

Iзнать проблему, потому что результаты раскрывающихся списков Ajax показываются на страницах PHP, когда форма отправляет, ни одно из этих значений не передается.Но я не уверен, как я могу даже представить их?Есть идеи?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012
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 голос
/ 03 апреля 2012

Вы, кажется, понимаете, почему это не работает, просто не как исправить это, верно?

Когда вы возвращаете данные со своей страницы PHP, их нужно обрабатывать с помощью javascript.Вместо возврата,

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

Возможно, это должен быть json.

{ val : key, val : key }

Затем Javascript может вставить его в HTML DOM, тогда ваша форма будет повторно распознавать значения при отправке формы.

Что касается кода Javascript, есть несколько способов, в jQuery есть несколько плагинов для его обработки.В противном случае я могу покопаться в поиске какого-то кода, если кто-то меня тоже не побьет:)

Редактировать:С рук, я думаю, этот код должен работать.Это не проверено, но, надеюсь, даст больше идеи, как его использовать.заменить

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);
}
...