PHP передает данные PHP в массив JS

У меня есть файл 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;

Ошибок больше не выводится, но консоль ничего не печатает.

Хорошо, конечно, это не тот путь, и также таким образом dataArray перезаписывается новым JSON на каждом шаге цикла.

nice_dev 25.10.2018 16:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
36
1

Ответы 1

Не возвращайте тег <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;

Colin747 25.10.2018 16:29

Почему бы вам вместо этого просто не закодировать оператор fetch_all?

Script47 25.10.2018 16:31

да, но почему в петле? Вы не можете заголовок после эха, поэтому он сломается на второй итерации. Вам нужно сделать это после того, как цикл будет завершен и вы построите свой возвращаемый массив так, как хотите.

delboy1978uk 25.10.2018 16:32

Таким же образом измените dataType: 'json' в запросе Ajax.

nice_dev 25.10.2018 16:35

Я обновил запрос Ajax, и теперь консоль ничего не печатает.

Colin747 25.10.2018 16:37

обновлено, вы не кодировали массив перед эхом, и ваш цикл продолжал перезаписывать ваш var

delboy1978uk 25.10.2018 16:38

Мой текущий код теперь соответствует обновлению вашего ответа, но консоль по-прежнему не печатает никаких данных.

Colin747 25.10.2018 16:39

Он печатает данные, когда тип данных AJAX изменяется обратно на text, поскольку это запрос POST в AJAX. Тип данных определяется тем, что отправляется?

Colin747 25.10.2018 16:45

Другие вопросы по теме