Как я могу получить данные из базы данных в выпадающем меню

Я попробовал следующее, но идентификатор не работал

//PHP CODE

$query = "SELECT kategorite FROM kategorite";

$data = mysql_query($conn, $query);

$makes = array();

while($row = mysql_fetch_array($data))
{
array_push($makes, $row["Lloji"]);
}
echo json_encode($makes);

//JAVASCRIPT CODE

$(document).ready(function () {

$.getJSON("getTipin.php", success = function(data)
{
var options = "";

for(var i=0; i < data.length; i++)

{

options += "<option value='" + data[i].toLowerCase() + "'>" + data[i] + "</option>";

}

$("#type").append(options);

$("type").change();
});

0

Решение

Код содержит несколько небольших ошибок в дополнение к тем, о которых говорится в других комментариях. Например, вы звоните change() на $('type') вместо $('#type'), Кроме того, не все браузеры хорошо работают, если не предоставляют тип контента JSON.

В общем, эта проблема состоит из двух частей:

// Here I strongly suggest to use PDO.

$dbh = new PDO('mysql:host=localhost;port=3306;dbname=database', 'user', 'password',
array(
PDO::ATTR_PERSISTENT        => true,
PDO::ATTR_EMULATE_PREPARES  => false,
PDO::ATTR_ERRMODE           => PDO::ERRMODE_EXCEPTION
)
);
$query  = "SELECT kat_id, kategorite FROM kategorite WHERE kategorite LIKE :search";
$stmt   = $dbh->prepare($query);

// Always check parameter existence and either issue an error or supply a default
$search = array_key_exists('search', $_POST) ? $_POST['search'] : '%';

$stmt->bindParam(':search', $search, PDO::PARAM_STRING);
$stmt->execute();
$reply = array();
while ($tuple = $stmt->fetch(PDO::FETCH_NUM)) {
$reply[] = array(
'value' => $tuple['kat_id'],
'text' => $tuple['kategorite'],
);
};

// See: http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type
Header('Content-Type: application/json');

// Adding Content-Length can improve performances in some contexts, but it is
// needless with any kind of output compression scheme, and if things go as they
// should, here we have either zlib or gz_handler running.

// die() ensures no other content is sent after JSON, or jQuery might choke.
die(json_encode($reply));
function fillCombo($combo) {
$.post('/url/to/php/endpoint',
{ search: '%' },
function(options) {
for (i in options) {
$combo[0].options[i] = {
value: options[i].value,
text : options[i].text
};
}
$combo.change();
}
);
}

fillCombo($('#comboBox');

В этом случае, поскольку возвращаемые данные имеют тот же формат, который используется comboBox, вы также можете сократить и ускорить процесс с помощью:

        function(options) {
$combo[0].options = options;
$combo.change();
}

В целом, вы хотите, чтобы сервер выполнял как можно меньше работы (нагрузка на сервер стоит денег и влияет на производительность), а также чтобы клиент выполнял как можно меньше работы (нагрузка на клиента влияет на восприятие и восприимчивость сайта). О каком формате обмена данными стоит задуматься.

Например, для очень длинных списков без подкачки страниц может потребоваться обрезать отправляемые данные только путем кодирования текста параметра. Затем вы отправите

[ 'make1','make2','make3'... ]

вместо

[ { "option": "1", "value": "make1" }, { "option": "2", "value": "make2" }, ... ]

и используйте более медленный клиентский цикл, чтобы заполнить поле со списком.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]