2016-02-17 3 views
0

Пожалуйста, помогите, поскольку я не могу добавить параметры в меню выбора. Данные находятся в строковой форме типа ~~. Поэтому здесь я разделяю данные, а затем перебираю их по длине данных и устанавливаю их для опций.Как добавить параметры выпадающего списка в ajax

Ниже приведен код Аякса

function showCircle() { 

      alert("Microsoft"); 

     xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 
     xmlhttp.onreadystatechange = handleStateChange; 
     xmlhttp.open("POST", "GetCircleDetails" , true); 

      xmlhttp.send(); 
     } 

    function handleStateChange() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       alert("The server replied with: "); 
       var splits21 = xmlhttp.responseText.split("~"); 
       var select = document.getElementById("circle"); 
       var opt = document.createElement("option"); 
       var i = 0; 
       for (i = 0 ; i < xmlhttp.responseText.length ; i++) 
        { 
        opt.valueOf(splits21[i]); 
       select.appendChild(opt); 
      } 


       alert("The server replied with: " +xmlHttp.responseText); 
      } 

Ниже HTML-теги используются.

<select name="slabFrom" onchange="showCircle(this.value)"> 
<option>--select--</option> 
<option>slab1</option> 
<option>slab2</option> 
<option>slab3</option> 
<option>slab4</option> 

</select> 

</br> 
</br> 
The circle is:<select id= 'circle' name="circle" > 
+0

Является ли запрос успешным или вы получите код ответа ошибки? – Lewis

+0

запрос успешный. Я даже получаю данные на странице jsp .. но я не могу добавить эти данные в качестве параметров во второе выпадающее меню –

ответ

1

Вы должны сделать несколько поправок в handleStateChange функции:

1) изменить то, что вы итерацию в for к splits21 вместо xmlhttp.responseText.

2) переместить var opt = document.createElement("option"); в изменение opt.valueOf(splits21[i]);for итерация

3) в opt.value = splits21[i];

4) добавить закрывающий тег для select в HTML: <select id='circle' name="circle"></select>

Проверить демо - codepen.

function handleStateChange() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
    var splits21 = xmlhttp.responseText.split("~"); 
    var select = document.getElementById("circle"); 
    var opt; 

    for (i = 0; i < splits21.length; i++) { 
     if (splits21[i]) { 
      opt = document.createElement("option"); 
      opt.innerHTML = splits21[i]; 
      opt.value = splits21[i]; 
      select.appendChild(opt); 
     } 
    } 

} 
+0

Спасибо большое! но есть и другие значения, которые добавляются –

+0

Вы использовали приведенный выше код или код в кодефене? Вы должны использовать тот, который указан выше. Остальное зависит от того, что у вас есть в 'xmlhttp.responseText', оно просто делится на массив и добавляется в' select'. Какие другие ценности вы имеете в виду? –

+0

Получил это. Затем просто заверните код внутри 'for' в' if (splits21 [i]) {...} '. Я обновил ответ. –

1

Во-первых, я переместил бы вашу переменную option в цикл for. Хотя я не знаю, что еще не так с вашим кодом, используя следующий метод работает - (это с жестко закодированными переменными для тестирования, замените их для разделенных переменных, полученных из вашего ajax) -

var selectValues ​​= ['test1', 'test2', 'test3'];

function handleStateChange(){ 
    var select = document.getElementsByTagName('select')[0]; 

    for(var i = 0; i < selectValues.length; i++){ 
    var option = document.createElement('option'); 
    option.text = selectValues[i]; 

    select.appendChild(option); 

    console.log(selectValues[i]); 
    } 
} 

Fiddle здесь -

https://jsfiddle.net/8pqq82eq/

+0

Получил это ... Большое спасибо! –