Я пытаюсь опубликовать значение моего селектора в файле php, но он не работает. Моя функция успеха работает, и когда я перехожу к «your_php_script.php», страница работает, и php работает, как и ожидалось. Почему страница php не отображается на странице с ajax? Я отредактировал свой пост, чтобы добавить функцию подключения к базе данных из database_connection.php
// html & jquery
<select name = "rooftop" id = "rooftop" class = "selectMenu">
<option value = "">Select an option</option>
<option value = "Yes">Yes</option>
<option value = "No">No</option>
</select>
<button id = "barButton">click</button>
<div id = "showBars">
</div>
<script type = "text/javascript">
$(document).ready(function(){
$("#barButton").click(function() {
var selected = $("#rooftop").val();
$.ajax({
type: "POST",
url: "your_php_script.php",
data: {selected: selected},
success: function(){
alert("works");
}
});
});
// code on your_php_script.php
<?php
require_once("database_connection.php");
$db = db_connect();
echo "<script type='text/javascript'> alert('works1'); </script>";
$selected = $_POST["selected"];
if (isset($selected)){
echo "<script type='text/javascript'> alert('works2'); </script>";
$sql = "SELECT bar_name, area, hourStart, hourEnd FROM barInfo WHERE rooftop = 1";
$result = mysqli_query($connection, $sql);
if (mysqli_num_rows($result) > 0) {
echo "<table id='list'><tr><th><h3>Name</h3></th><th><h3> Area</h3></th><th><h3>Happy Hour Times</h3></th></tr>";
while($row = mysqli_fetch_assoc($result)) {
echo "<tr> <th> <h6> " . $row["bar_name"] . "</h6> </th> <th> <h6>" . $row["area"] . "</h6> </th> <th> <h6>" . $row["hourStart"] . "-" . $row["hourEnd"] . "</h6> </th> </tr>";
}
echo "</table";
}
}
db_disconnect($db);
?>
// database connection
function db_connect() {
global $connection, $servername, $username, $password, $database;
$connection = new mysqli($servername, $username, $password, $database) or die("Unable to Connect");
return $connection;
}
if (isset($selectd))
- Где вы определяете $selectd
(тоже опечатка)?
if (isset($selectd))
это правильно?
Разве не должно быть $selected
?
Кроме того, как сказал @Magnus, где определяется $selectd
, если это правильно?
Ранее я предупреждал $("#rooftop").val(); так что я знаю, что это работает
Вы проверили вкладку сети в консоли Chrome?
Я исправил опечатку, и она все еще не работает. переменная $selected должна быть из сообщения ajax. Первоначальное предупреждение также не работает, поэтому я не думаю, что оно подключается к странице php в первую очередь.
Вам не нужно брать значение $selected из POST, например: $selected = $_POST['selected']
, а затем использовать if (isset($selected))
Во-первых, попробуйте простой echo ("something"); die;
в your_php_script.php в самом начале и проверьте в сети, доходит ли он до этого файла после ajax-запроса.
на вкладке ответа в сетевом теге xhr отображается первое предупреждение, но почему предупреждение на самом деле не работает?
Вы хотите сказать, что он печатает «work1» в сетевой консоли xhr, но предупреждение не появляется?
@JitendraAhuja, вот что происходит
Тем не менее вы не изменили свою переменную в условии if. Пожалуйста, сделайте это if (isset($selected))
я обновил переменную $select и теперь все отображается в консоли, но не на странице
В коде здесь я все еще вижу это if (isset($selectd))
. Почему ? Пожалуйста, измените написание выбранного с помощью if (isset($selected))
Кроме того, это все, что у вас есть в этом файле? Я имею в виду, где определена переменная $connection? Вы включили какой-либо другой файл php, из которого можно использовать $connection?
я тоже обновил его здесь, но на странице все еще ничего не отображается, хотя оно отображается в консоли
@JitendraAhuja я обновил, чтобы показать весь код, который у меня есть на странице php
Хорошо, теперь попробуйте echo mysqli_num_rows($result)
, действительно ли оно больше 0, чтобы войти в это условие if (mysqli_num_rows($result) > 0)
в консоли пишет ноль
Это означает, что либо соединение $ не определено должным образом, либо в базе данных нет такой записи, где barInfo
= 1, поэтому она ничего не возвращает.
Можете ли вы опубликовать код файла database_connection.php здесь? Таким образом, мы можем проверить, есть ли вообще подключение к БД, правильно оно выполнено или нет.
я создал базу данных в терминале, и я запустил sql в терминале, и он работает
Возможно, $connection на самом деле не подключается. У вас есть это в вашем database_connection.php
файле? if ($connection->connect_error) { die("Connection failed: " . $connection->connect_error); }
Сначала вы, поскольку вы используете эхо в своем ответе php, вы должны определить, что в вашем запросе Ajax будет ответ.
Итак, ваш Ajax будет заменен чем-то вроде этого
$.ajax({
type: "POST",
dataType: "text"
url: "your_php_script.php",
data: {
selected: selected
},
success: function() {
alert("works");
}
});
Также вы можете пойти на: dataType : 'html'
Как вы упомянули, количество строк в результате не превышает 0. Это означает, что либо соединение $ не определено должным образом, ИЛИ в базе данных нет такой записи, где barInfo = 1
поэтому ничего не возвращается.
Итак, во-первых, вы должны проверить свой файл database_connection.php
, правильно ли выполнено подключение к БД, потому что может случиться так, что этот файл (your_php_script.php
) не получает $connection
из файла database_connection.php
.
Кроме того, как я упоминал ранее, тип данных важен (хотя и не обязателен). Еще более важно добавлять входящие данные в файл apt. элемент, для которого ваша функция успеха должна выглядеть так:
$.ajax({
type: "POST",
dataType: "html"
url: "your_php_script.php",
data: {
selected: selected
},
success: function(result) {
alert("works");
jQuery("#showBars").html(result);
},
error: function(error) {
alert(error);
}
});
Что нужно помнить при использовании ajax:
1) Убедитесь, что атрибут dataType
правильно определен. Если ничего не указано, jQuery попытается сделать вывод на основе MIME-типа ответа.
2) Функция Success
должна быть правильно определена с правильным использованием входящих данных о том, как использовать их в вашем HTML-представлении.
3) Возьмите за привычку использовать функцию error
, так как это поможет вам получить ошибки, когда она не входит в функцию Success
и имеет какие-либо ошибки.
Пожалуйста, примите ответ и скажите, какой трюк сработал для вас
добавление типа данных и jQuery("#showBars").html(результат); }, чтобы моя функция успеха заработала. Я обновил свой пост, чтобы показать, где определяется соединение, я не уверен, почему оно влияет на количество строк.
как вы подтвердили, что ajax не отправляет данные? Я думаю, что это должно сделать, без ошибок в этой части. Убедитесь, что у
var selected = $("#rooftop").val();
есть какая-то ценность.