Я использую метод $.ajax
для передачи данных из моего JS-файла в мой PHP-файл «requetes.php». Этот PHP-файл выполняет SQL-запрос в зависимости от переменной, которая есть в моем JS-файле.
Мой Javascript:
$.ajax({
url: 'requetes.php',
type: 'POST',
data: {
datepicker: formattedDate
},
success: function(data) {
$("#sql-results").text(data);
},
error: function(xhr) {
console.info("echec de l'ajax !");
}
})
В моем файле PHP:
$rq_datepicker = "
SELECT *
FROM partie
WHERE date = '"$_POST['datepicker']"'";
$query = mysqli_query($connect, $rq_datepicker);
while ($result = mysqli_fetch_array($query)) {
echo "Il y a ".$result['Reussie']." partie(s)";
echo "Il y a ".$result['Perdue']." partie(s);"
}
Я сократил код, чтобы его было легче объяснить, но это работает отлично.
Я могу получить переменную datepicker из JS в PHP, чтобы выполнить свой запрос SQL в зависимости от этой переменной.
И строка $("#sql-results").text(data);
возвращает мои 2 эха из моего файла PHP.
МОЯ ПРОБЛЕМА:
Я просто хочу получить доступ к этим двум переменным $result['Reussie']
и $result['Perdue']
из моего JS-файла.
Я пробовал много вещей, таких как использование $.ajax с методом GET или $.get, но безуспешно.
Вы должны вернуть ответ от php в формате json, а затем использовать его в конце js, как хотите.
Во-первых, ваш код уязвим для SQL-инъекций, вы должен используете PDO с подготовленными операторами для построения запросов.
Другое дело, что вы просто создаете массив с парой ключ-значение, а затем возвращаете этот массив, используя кодирование в json.
Пример: echo json_encode(array('foo' => 'bar'));
а затем в коде js для ajax проанализируйте data
с помощью var foo_result = JSON.parse(data['foo']);
, теперь вы можете получить доступ к нужной переменной.
Просто дайте мне знать, если вы достигли ваших требований.
Попробуй это:
$.ajax({
url: 'requetes.php',
type: 'POST',
data: {
datepicker: formattedDate
},
success: function(data) {
$("#sql-results").html(data);
},
error: function(xhr) {
console.info("echec de l'ajax !");
}
});
$datepick = strip_tags($_POST['datepicker']);
$rq_datepicker = "
SELECT *
FROM partie
WHERE date = '$datepick'";
$query = $connet->query($rq_datepicker);
while ($result = $query->fetch_assoc()) {
echo "Il y a ".$result['Reussie']." partie(s)";
echo "Il y a ".$result['Perdue']." partie(s);"
}
}
Вы должны структурировать свой ответ PHP таким образом, чтобы ваши данные были доступны в JS. Для этого обычно вы используете JSON таким образом, что вы получаете уже обработанные данные, и вам просто нужно получить к ним локальный доступ в JS.
В этом случае у вас есть 2 переменные, к которым вы хотите получить доступ. Но я думаю, вы также хотите отформатировать их в какой-то объект, который вы выбрали в jQuery впоследствии.
Чтобы добиться этого, есть 2 способа.
Первый - сделать всю обработку в PHP и просто сделать переменные доступными.
Сторона PHP:
$rq_datepicker = "
SELECT *
FROM partie
WHERE date = '"$_POST['datepicker']"'";
$query = mysqli_query($connect, $rq_datepicker);
while ($result = mysqli_fetch_array($query)) {
$response['dataRaw'] = array('Reussie' => $result['Reussie'],
'Perdue' => $result['Perdue']);
$response['dataProcessed'] = array('Reussie' => "Il y a ".$result['Reussie']." partie(s)",
'Perdue' => "Il y a ".$result['Perdue']." partie(s)");
}
}
echo json_encode($response); // <-- using this will encode the variable according to the json specifics
Как только php обрабатывает данные, в JS вам просто нужно получить к ним доступ в вашей анонимной функции, привязанной к успеху вызова Ajax.
Сторона JS (в случае, если HTTP-запрос идет 200):
success: function( data )
{
var response = JSON.parse(data);
$("#sql-results").text(response.dataProcessed.Reussie+response.dataProcessed.Perdue);
// to access the variables instead:
// response.dataRaw.Reussie
// response.dataRaw.Perdue
}
Второй - PHP просто передает переменные в JS, а затем вы создаете свою строку локально.
Сторона PHP:
$rq_datepicker = "
SELECT *
FROM partie
WHERE date = '"$_POST['datepicker']"'";
$query = mysqli_query($connect, $rq_datepicker);
while ($result = mysqli_fetch_array($query)) {
$response['data'] = array('Reussie' => $result['Reussie'],
'Perdue' => $result['Perdue']);
}
}
echo json_encode($response); // <-- using this will encode the variable according to the json specifics
В этом случае у вас нет предварительно обработанных данных, поэтому вам нужно создавать свои строки локально
Сторона JS (в случае, если HTTP-запрос идет 200):
success: function( data )
{
// to access the variables in this case:
// response.data.Reussie
// response.data.Perdue
var response = JSON.parse(data);
var stringReussie = "Il y a "+response.data.Reussie+" partie(s)";
var stringPerdue = "Il y a "+response.data.Perdue+" partie(s)";
$("#sql-results").text(stringReussie+stringPerdue);
}
Некоторые дополнительные:
Использование только json_encode с эхом в качестве вывода без объявления типа ответа обычно устанавливает тип ответа «application/json».
echo json_encode($response);
Чтобы избежать этого «обычно» и убедиться, что часть ответа типа контента «application/json» (если это так), вы также должны установить заголовок ответа.
header("Content-type:application/json")
Дополнительная информация о заголовках: Заголовок руководства по PHP()
Подробнее о json_encoding читайте здесь: https://www.php.net/manual/en/function.json-encode.php
Эй, ребята, это работает! Большое спасибо ! Поэтому я использовал это решение:
В моем файле PHP:
$response['data'] = array('Reussie' => $result['Reussie'], 'Perdue' => $result['Perdue']);
echo json_encode($response);
В моем JS-файле:
var response = JSON.parse(data);
var stringReussie = "Il y a "+response.data.Reussie+" partie(s)";
var stringPerdue = "Il y a "+response.data.Perdue+" partie(s)";
$("#sql-results").text(stringReussie+stringPerdue);
Я просто не понимаю, почему я не мог поставить заголовок. Похоже, он «преобразует» весь мой файл index.php. Но он все еще работает, так что... Думаю, все в порядке. :)
Ты обалденный !
Если вы хотите получить доступ к двум значениям PHP по отдельности, я бы предложил вместо этого вернуть JSON из вашего PHP.