Я пытаюсь заполнить <input /> из базы данных с помощью AJAX, но могу получить только тестирование данных в <textarea> или <span>.
Мой код AJAX
$('#part_number').on('change', function() {
var part_number = $(this).val();
$.ajax({
url: '<?PHP echo admin_url('admin-ajax.php'); ?>',
type: 'post',
data: { action: 'description', part_number: part_number },
success: function(data) {
$('#description').val( data );
}
});
});
Мое поле ввода
<input id = "description" value = "" />
functions.php
add_action('wp_ajax_description' , 'description'); //ajax parameter action
add_action('wp_ajax_nopriv_description','description');
function description(){
$part_number = $_POST['part_number']; //id
global $wpdb;
$stock = $wpdb->get_results("SELECT * FROM _cif_inventory_table WHERE part_number = '$part_number'");
foreach ( $stock as $item ) {
echo $item->Description;
}
die();
}
Я не мог найти ничего здесь или гуглить
РЕДАКТИРОВАТЬ Это цикл, поэтому там 20 строк, но работает только первая, что я сделал не так?
<?PHP
for ($i = 1; $i <= 20; $i++){
?>
<div id = "lines" class = "row">
<div class = "col-sm-1" style = "text-align:left;border:1px solid #808080"><span id = "row_number"><?PHP if ( $i < 10 ){ echo "0".$i;}else{echo $i;} ?></span></div>
<div class = "col-sm-2" style = "text-align:left;border:1px solid #808080">
<select id = "part_number" style = "border:0px;">
<option value = "None Selected"></option>
<?PHP
$partNumbers = $wpdb->get_results("SELECT * FROM _cif_inventory_table;");
foreach ($partNumbers as $partNumber) {
echo '<option value = "'.$partNumber->part_number.'">'.$partNumber->part_number.'</option>';
}
?>
</select>
</div>
<div class = "col-sm-1" style = "text-align:left;border:1px solid #808080"><input size = "5" maxlength = "5" id = "quantity" value = "" /></div>
<div class = "col-sm-6" style = "text-align:left;border:1px solid #808080"><input size = "75" id = "description" value = "" /></div>
<div class = "col-sm-1" style = "text-align:left;border:1px solid #808080"><input id = "unitPrice" value = "" /></div>
<div class = "col-sm-1" style = "text-align:left;border:1px solid #808080"><input id = "amount" value = "" /></div>
</div><!-- end .row -->
<?PHP
}
?>
part_number на самом деле не число, это строка. Вы можете привести примеры REST Я не совсем понимаю, что вы имеете в виду
Вы используете .val() для input, а не .html() ... например. вот так $('#description').val( data );
@LGSon Я тупой! Благодарю вас! на самом деле это была моя первая попытка использовать AJAX! Вы сделали мой день
@LGSon На самом деле, может быть, вы можете помочь с чем-то еще, у меня есть этот ввод в цикле for, и я могу получить только первую строку, чтобы действительно что-то сделать?
Я не знаю PHP. Добавьте тег в свой список тегов и обновите свой вопрос, чтобы сосредоточиться на этой части, теперь, когда задание решено.
Избегайте добавления разных вопросов в сообщение, так как люди, как правило, не возвращаются к ним. Если вы создаете новый вопрос, убедитесь, что вы вставили свой PHP и обработанный код из инспектора элементов.
@bckelley, можете ли вы заменить все в своем AJAX статическим HTML, чтобы он всегда возвращал одно и то же? Это должно исключить PHP из вашего вопроса
Технически @LGSon первым ответил на мой первоначальный вопрос, так что это принятый ответ!
@bckelley Приношу извинения за «прими ее ответ». Но еще раз: «этот ввод в цикле for, и я могу получить только первую строку, чтобы действительно что-либо сделать» - это потому, что вы используете один и тот же идентификатор для элементов во всех 20 строках, сгенерированных с помощью этого цикла.






Вы хотите заполнить атрибут value ввода, поэтому вам нужно использовать .val():
$('#description').val( data );
Рассматривали ли вы вместо этого использование конечной точки REST API? Обратите внимание, что в вашем коде есть атака с использованием SQL-инъекции, поскольку вы никогда не проверяете, что
part_numberна самом деле является числом, а не оператором SQL. Кроме того, что вы подразумеваете под"can only get the data testing in a textarea or a span?". Я полагаю, вы уже знаете, чтоhtmlустанавливает внутренний HTML-код элементов, но элементыinputне имеют внутреннего HTML-кода.