У меня проблема, о которой я очень смущен. У меня есть поле выбора с динамически сгенерированным с помощью запроса mysqli:
$result = mysqli_query($db, "SELECT * FROM `users` WHERE `user_id` > 0"); echo '<html><form name="contacts" method="post"><select name="contacts"><option value="Contact list" onchange="func()">Contact List</option>'; while($row = $result->fetch_assoc()){ echo '<option value = '.$row['user_name'].'>'.$row['user_name'] . '</option>'; } echo '</select></form>';
Я совершенно не знаком с AJAX, но мне нужно использовать jquery и ajax для передачи переменной this.value переменной php для использования в более позднем запросе.
Вот мой сценарий (большинство из которых было найдено в Интернете):
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> $("#contacts").change(function() { //get the selected value var selectedValue = this.value; //make the ajax call $.ajax({ url: 'function.php', type: 'POST', data: {option : selectedValue}, success: function() { console.log("Data sent!"); } }); }); </script>
Теперь, когда я нажимаю значение в поле выбора, ничего не происходит. Нет предупреждений или ошибок и т. Д.
Пожалуйста, помогите мне.
ps function.php существует. Это просто простое эхо на данный момент (для целей тестирования)
ОБНОВЛЕНИЕ: ЗДЕСЬ FUNCION.PHP:
<?php /*$val = $_REQUEST['selectedValue']; echo $val;*/ function function(){ $val = $_REQUEST['selectedValue']; echo $val; } ?>
ОБНОВЛЕНИЕ: Спасибо всем за вашу помощь. Я теперь получил его, чтобы работать в том, что секция сети проверки chrome показывает запрошенную функцию.php, но я до сих пор не получаю эхо (я использовал внешние .js-файлы, чтобы заставить его работать). Моя функция запроса J также успешна (функция успеха эхо в консоли)
В поле выбора нет идентификатора, и вы смотрите событие change
$("#contacts")
.
Изменить:
echo '<html><form name="contacts" method="post"><select name="contacts"><option value="Contact list" onchange="func()">Contact List</option>';
чтобы:
echo '<html><form name="contacts" method="post"><select name="contacts" id="contacts"><option value="Contact list">Contact List</option>'; ^^^^^^^^^^^^^ here
Вам также нужен только один обработчик событий, поэтому я удалил встроенный, который, похоже, ничего не делает.
Изменить: если выбор создается с помощью ajax, вам необходимо передать событие:
$("body").on('change', '#contacts', function() { ^^^^ for example
Редактировать 2: Ваша переменная называется $_REQUEST['option']
а не $_REQUEST['selectedValue']
. Вы также не называете свою функцию -badly named-function, поэтому вы не получите какой-либо вывод из php, кроме как из ошибки, такой как Parse error: syntax error, unexpected 'function' ...
Вызовите функцию обмена в теге select, как показано ниже.
echo '<form name="contacts" method="post"><select name="contacts" onchange="func(this.value)"><option value="Contact list">Contact List</option></form>';
Javascript src должен быть в заголовке html-страницы.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
Добавьте выше в заголовке html. Обновить javacript, как показано ниже
Поскольку функция onchange вызывается в самом теге select, следующего достаточно
<script> function func(selectedValue) { //make the ajax call $.ajax({ url: 'function.php', type: 'POST', data: {option : selectedValue}, success: function() { console.log("Data sent!"); } }); } </script>
Обновленный php: Если вы хотите получить значение из функции, вы должны его вызвать. В противном случае, просто, вы можете сделать, как показано ниже
<?php if($_REQUEST['option']) { $val=$_REQUEST['option']; echo $val; } ?>
В .php-файле,
$val = $_REQUEST['selectedValue']; echo $val;
установите атрибут id в вашем php-коде для тега select и
пожалуйста, не используйте одно и то же значение для атрибута name в форме и выберите теги!
просто измените свою функцию на «body». и дайте своим элементам идентификатор «контактов»,
$("body").on('change', '#contacts', function() { //get the selected value var selectedValue = $(this).val(); //make the ajax call $.ajax({ url: 'function.php', type: 'POST', data: {option : selectedValue}, success: function() { console.log("Data sent!"); } }); });