#javascript #jquery #node.js #ajax
#javascript #jquery #node.js #ajax
Вопрос:
У меня есть два выпадающих списка. Один предназначен для выбора основной категории, второй — для выбора подкатегории.
Я хочу иметь возможность заполнять подкатегорию на основе выбранной основной категории.
До сих пор я пробовал использовать JQUERY и AJAX для прослушивания изменений в значении выпадающего списка с помощью jquery и отправки ajax-запроса на соответствующий маршрут.
Вид
<div class="form-control">
<label for="category">Category</label>
<select name="category" id="category">
<option value='Men'>Men</option>
<option value='Women'>Women</option>
<option value='Sports'>Sports</option>
</select>
</div>
<div class="form-control">
<label for="subcategory">Sub Category</label>
<select id="subcategory" name="subcategory">
</select>
</div>
AJAX и JQUERY
$("#category").on("change", function () {
$("#subcategory").empty();
showValue($(this).val());
});
var data = {};
function showValue(val) {
console.log(val);
data.category = val;
$.ajax({
url: "/admin/update-list",
type: "POST",
data: data,
success: function(result) {
updateDOM(result);
},
error: function (err) {
console.log(err);
}
});
};
var updateDOM = function (result) {
var data = result.data;
for (var i = 0; i < data.length; i ) {
console.log(data[i]);
$("#subcategory").append("<option>" data[i] "</option>");
};
};
Маршрут /admin/update-list
router.post('/update-list', (req,res,next) => {
let data = [];
let category = req.body.category;
console.log('From the ajax call, category is' category);
if(category = "Men") {
data = [
'Sneakers',
'Boots',
'High Heels',
'Litas',
'Timbs'
];
res.status(200).json({data});
res.end();
}
else if(category = "Women") {
data = [
'Timbs'
];
res.status(200).json({data});
res.end();
}
else if(category = "Sports") {
data = [
'Soccer Boots',
'Rugby Boots'
];
res.status(200).json({data});
res.end();
}
});
Независимо от того, какой вариант я выберу, второй выпадающий список возвращает те же данные.
Комментарии:
1. Является ли страница, которую вы используете для получения значений параметров, PHP?
2. Нет. Я использую EJS
3. Я делаю это все время, используя PHP, но не EJS. Боюсь, я не смогу помочь. В PHP я заменяю select в DOM на новый select, который встроен в post back. Тогда мне не нужно беспокоиться о добавлении или изменении существующих параметров.
4. Это может помочь. Просто опубликуйте свой ответ
Ответ №1:
Я бы сделал это на PHP. Надеюсь, это передает то, что вы могли бы адаптировать к вашей ситуации:
<select name="foo" >
</select>
вызов ajax
$.ajax({
type:'POST',
url:'your_code_page.php',
data:'param1=' variable,
success:function(html){
$('[name="foo"]').html(html);
}
});
PHP post back
echo "<option value=''>Please select a thing</option>"; <<outside loop
while ($row = sqlsrv_fetch_array($results)) {
$value = $row['value'];
$display = $row['display'];
//-display the result of the array
echo "<option value= " . $value . ">" . $display . "</option>"; << options returned in post
}