2016-08-16 1 views
0

Я имею выпадающий список Bootstrap в моем HTML, который при нажатии на должны перечислить значения из базы данных Postgres через запрос AJAXКак вывести значения выпадающего списка начальной загрузки из базы данных с помощью вызова ajax?

<div class="dropdown"> 
    <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Region/Country 
    <span class="caret"></span> 
    </button> 
    <ul class="dropdown-menu"> 
    <li> 
     <a href="#"></a> 
    </li> 
    </ul> 
</div> 

Это мой служебный код PHP, который вызывается с помощью AJAX, когда выпадающий щелкают:

$result = pg_query($dbh, "SELECT country from countries"); 

if (!$result) { 
    echo "An error occurred.\n"; 
    exit; 
} 
$features = array(); 

while ($row = pg_fetch_array($result)) { 
    $features[] = array("country" => array($row[0])); 
} 

$result_feature = $features; 

echo json_encode($result_feature); 

я пытался что-то вроде ниже

$(".dropdown-toggle").dropdown({ 
       source: function (request, response) { 
        $.ajax({ 
         url: 'KFRI_Service.php', 
         dataType: 'json',//since you wait for json 
         data: { 
          'service': 'dropdown' 
         }, 
         success: function(json){ 
         //now when you received json, render options 
          $.each(json, function(i, option){ 
           var rendered_option = '<li><a href="#">'+ option.country +'</a></li>'; 
           $(rendered_option).appendTo('.dropdown-menu'); 
          }) 
         } 
        }) 

       } 
      }) 

current dropdown

+0

появится ли выпадающий после второго кликать? Вы проверяете, что json извлекается нормально? – KmasterYC

ответ

0

Что-то вроде этого:

$.ajax({ 
    url: 'url', 
    dataType: 'json', //since you wait for json 
    success: function(json) { 
    //now when you received json, render options 
    $.each(json, function(i, option) { 
     var rendered_option = '<li><a href="#">' + option.country + '</a></li>'; 
     $(rendered_option).appendTo('.dropdown-menu'); 
    }) 
    } 
}) 

И кстати - так как интерфейс ждет JSON, вы не всегда повторяют текст, например, вам нужно написать сообщение об ошибке:

if (!$result) { 
    echo "An error occurred.\n"; 
    exit; 
} 

Плохое - потому что на стороне клиента JQuery попытается проанализировать ответ JSON и будет бесшумно терпеть неудачу в случае ошибки.

Должно быть сделано так:

if (!$result) { 
    echo json_encode(['error' => 'An error occurred.']); 
    exit; 
} 

Теперь можно легко проверить на стороне клиента:

success: function(json){ 

    if (json.error) { 
    alert(json.error); 
    } else { 
    // do your stuff 
    } 

} 
+0

Вы действительно получаете json? Что будет 'console.log (json);' в функции suceess будет выводиться? –

+0

Хорошо. После замены на это if (! $ Result) { echo «Произошла ошибка. \ N"; выход; }. Выпадающие элементы работают. Он выглядит длинным. Возможно ли иметь небольшие выпадающие элементы с вертикальной полосой прокрутки? –

+0

уверен, просто поместите css на элемент ul: 'style =" height: 300px; overflow: scroll "' –

0

Вы можете сделать функцию, чтобы получить данные PHP, как JSON с помощью AJAX, как это:

function getJSON(callback){ 
    return $.ajax({ 
    url: your_php_script_url, //the url of the PHP script where your echo your JSON 
    dataType:'json', 
    type: 'POST', 
    success: callback 
    }); 
} 

А затем вызвать вашу функцию getJSON так:

getJSON(function(data){ 
    // where data is your data from PHP 
}); 

И здесь на вас просто просто нужно создать выпадающий список и перечислить элементы в нем, например, с помощью цикла for in.

Смежные вопросы