У меня есть файл PHP, который запрашивает базу данных MySQL, чтобы вернуть результаты, в настоящее время я сохраняю соответствующую строку результатов в массиве PHP, а затем пытаюсь вывести массив JS с сохраненными данными PHP. Кажется, я не могу получить доступ к переменной JS из моих файлов JS.
PHP:
while($row = mysqli_fetch_array($query)) {
$dataArray = array($row['stepNumber']);
echo '<script>';
echo 'var dataArray = ' . json_encode($dataArray) . ';';
echo '</script>';
}
JS:
$.ajax({
type: 'POST',
url: 'queries/dateRangeSelect.php',
dataType: 'text',
data: {startDate: startDate, endDate: endDate},
cache: false,
success: function(response) {
console.info(response);
window.alert(dataArray);
},
Сообщается, что dataArray не определен, когда window.alert пытается сработать.
Обновлено:
while($row = mysqli_fetch_array($query)) {
$dataArray = array($row['stepNumber']);
}
header('Content-Type: application/json');
echo $dataArray;
Ошибок больше не выводится, но консоль ничего не печатает.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Не возвращайте тег <script>, вы можете просто вернуть JSON:
header('Content-Type: application/json');
echo $json;
Вы, вероятно, захотите сделать это ПОСЛЕ того, как ваш цикл будет завершен и вы создали массив, который хотите вернуть.
UPDATE
Основываясь на ваших изменениях, я предлагаю нечто подобное:
$dataArray= [];
while($row = mysqli_fetch_array($query)) {
$dataArray[] = array($row['stepNumber']);
}
header('Content-Type: application/json');
echo json_encode($dataArray);
Вы имеете в виду такой код: $dataArray = array($row['stepNumber']); header('Content-Type: application/json'); echo $dataArray;
Почему бы вам вместо этого просто не закодировать оператор fetch_all?
да, но почему в петле? Вы не можете заголовок после эха, поэтому он сломается на второй итерации. Вам нужно сделать это после того, как цикл будет завершен и вы построите свой возвращаемый массив так, как хотите.
Таким же образом измените dataType: 'json' в запросе Ajax.
Я обновил запрос Ajax, и теперь консоль ничего не печатает.
обновлено, вы не кодировали массив перед эхом, и ваш цикл продолжал перезаписывать ваш var
Мой текущий код теперь соответствует обновлению вашего ответа, но консоль по-прежнему не печатает никаких данных.
Он печатает данные, когда тип данных AJAX изменяется обратно на text, поскольку это запрос POST в AJAX. Тип данных определяется тем, что отправляется?
Хорошо, конечно, это не тот путь, и также таким образом
dataArrayперезаписывается новым JSON на каждом шаге цикла.