AJAX Call не возвращает никаких данных

Я пытаюсь создать зависимость для проекта, запрос SQL работает и возвращает нужные мне данные в администраторе PHP, однако, когда я пытаюсь создать для этого запрос AJAX, все, что он делает, это возвращает пустой массив, это вызывается кнопкой нажмите, и когда я меняю вызов AJAX на другой файл PHP, он возвращает данные из этого вызова, но ничего не возвращает, когда я снова меняю его обратно

JS-функция

«Идентификатор» здесь заполняется динамически из функции onClick, это работает и возвращает правильный идентификатор для данного местоположения, проверяется в сети Chrome Dev Tools и видит, что номер работает.

function checkLocationDependancies(id) {

  $.ajax({
    url: "./libs/php/checkDepartmentByLocation.php",
    type: "GET",      
    dataType: 'json',
    data: { 
          id,
      },

      success: function(result) {

      console.info(id)
       console.info(result)
      },
      error: function(result) {
          alert('error');
      }
  })
};

PHP-маршрут

SQL-запрос ниже работает, если я скопирую и вставлю его в администрацию PHP, он вернет необходимую мне информацию.

<?php


    
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

    $executionStartTime = microtime(true);
    
    include("config.php");

    header('Content-Type: application/json; charset=UTF-8');

    $conn = new mysqli($cd_host, $cd_user, $cd_password, $cd_dbname, $cd_port, $cd_socket);

    if (mysqli_connect_errno()) {
        
        $output['status']['code'] = "300";
        $output['status']['name'] = "failure";
        $output['status']['description'] = "database unavailable";
        $output['status']['returnedIn'] = (microtime(true) - $executionStartTime) / 1000 . " ms";
        $output['data'] = [];

        mysqli_close($conn);

        echo json_encode($output);

        exit;

    }   


    $query = $conn->prepare('SELECT `department`.`locationID`, `location`.`name` FROM `department` LEFT JOIN `location` ON (`location`.`id` = `department`.`locationID`) WHERE `department`.`id` = ?');

    $query->bind_param("i", $_REQUEST['id']);

    $query->execute();
    
    if (false === $query) {

        $output['status']['code'] = "400";
        $output['status']['name'] = "executed";
        $output['status']['description'] = "query failed";  
        $output['data'] = [];

        mysqli_close($conn);

        echo json_encode($output); 

        exit;

    }

    $output['status']['code'] = "200";
    $output['status']['name'] = "ok";
    $output['status']['description'] = "success";
    $output['status']['returnedIn'] = (microtime(true) - $executionStartTime) / 1000 . " ms";
    $output['data'] = [];
    
    mysqli_close($conn);

    echo json_encode($output); 

?>

Я изменил маршрут на другой маршрут, и данные возвращаются при нажатии кнопки. Он должен вернуть ответ json, содержащий идентификатор местоположения и название местоположения, чтобы я мог затем использовать его для создания условия для проверки, а затем принять или отклонить. удаление

РЕДАКТИРОВАНИЕ Подтверждение ответа сети

Вкладка «Ответ»

Ответ Console.log Цифры разные, так как я нажал другой номер.

Когда вы проверяете вкладку «Сеть», что отображается для этого запроса ajax? Возвращает ли он код ответа 200 или что-то еще? Вы видите что-нибудь в необработанном ответе?

Barmar 08.07.2024 23:05

Проверьте журнал ошибок PHP на сервере, чтобы убедиться, что сценарий не работает.

Barmar 08.07.2024 23:06

Я добавил изображение к вопросу, оно возвращает 200 обратно, а также возвращает правильный идентификатор для кнопки, которую я нажимаю.

Alex Holmes 08.07.2024 23:10

Где я могу проверить журнал ошибок PHP? - Извините, я все еще учусь этому...

Alex Holmes 08.07.2024 23:10
stackoverflow.com/questions/5127838/…
Barmar 08.07.2024 23:11

Что вы видите на вкладке «Ответ»?

Barmar 08.07.2024 23:12

{"status":{"code":"200","name":"ok","description":"success",‌​"returnedIn":"1.6360‌​282897949E-6 мс"},"data" :[]}

Alex Holmes 08.07.2024 23:22

Все выглядит так, как будто все работает, но в ответ не приходит ничего, кроме пустого ответа.

Alex Holmes 08.07.2024 23:23

Убедитесь, что на вкладке «Ответ» нет ничего лишнего до или после JSON.

Barmar 08.07.2024 23:25

Когда вы говорите «ничего не возвращает», вы имеете в виду, что весь console.info(result) пуст или просто массив data: пуст?

Barmar 08.07.2024 23:27

Этот JSON выглядит нормально. Мне кажется, что нет department.id = 1

Barmar 08.07.2024 23:30

Я добавил изображение вкладки ответа, там есть только это, если я console.info(result), он просто дает мне пустой массив/объект без какой-либо информации внутри него.

Alex Holmes 08.07.2024 23:31

Одна вещь, которую я бы проверил, если вы говорите, что он возвращает правильные данные через прямой запрос, - это проверить тип данных id, ajax может передавать строку, а запрос может ожидать числа. вы можете отладить саму конечную точку php через postman/cURL и проверить конечную точку php, чтобы определить, является ли это php или клиентом

danielRICADO 08.07.2024 23:33

Он не пустой, в нем есть status:, и он содержит все данные, которые вы указали выше.

Barmar 08.07.2024 23:33

@danielRICADO Символ i в bind_param() сообщает mysqli преобразовать его в целое число.

Barmar 08.07.2024 23:34

Я не вижу никаких проблем с кодом. Запрос просто возвращает пустой результат, что произойдет, если идентификатор отдела не существует в таблице.

Barmar 08.07.2024 23:35

@Barmar, ах, да, я это пропустил, но все же рекомендовал бы OP проверить конечную точку напрямую или также опубликовать детали запроса в вопросе.

danielRICADO 08.07.2024 23:38

только что проверил это, поскольку я знаю, что раньше мне приходилось скрывать, но только что проверил оба id: parseInt(id) и id: toString(id) и ни один из них не работает, просто не могу понять, почему, если я изменю маршрут PHP на другой я знаю, что работает, ответ возвращается нормально

Alex Holmes 08.07.2024 23:38

Вы уверены, что включаете("config.php"); для другого маршрута то же самое (или это другая конфигурация?). Кроме того, что произойдет, если вы жестко запрограммируете правильный идентификатор в файле php, возвращающем пустые данные? Похоже, что база данных может быть другой.

user3791775 08.07.2024 23:51

не должны ли данные быть пустым массивом? $output['данные'] = []; разве вам не следует передавать результат запроса в данные?

danielRICADO 08.07.2024 23:52

Ах, хорошая мысль @danielRICADO

user3791775 09.07.2024 00:00

У меня есть несколько других маршрутов PHP, которые получают разную информацию, все они содержат один и тот же файл конфигурации и содержимое. Я скопировал содержимое другого файла, чтобы сделать этот, поэтому все одинаково, просто по какой-то причине возвращаемый массив содержит нет информации

Alex Holmes 09.07.2024 00:05

@Alex, причина в том, что данным присваивается пустой массив, а затем они возвращаются. Вам необходимо присвоить результаты запроса свойству данных.

danielRICADO 09.07.2024 00:38
$output['data'] = $query->fetch_all()
Barmar 09.07.2024 01:27

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

Alex Holmes 09.07.2024 13:16

Вы пробовали этот код $output["data"] = $query->get_result()->fetch_all();...?

Juan 09.07.2024 14:28

@danielRICADO и Бармер... Да, вы оба правы, я изменил это на предложенное, и это сработало, я не уверен, что я сделал, но мне каким-то образом удалось получить результат, показывающий пустой массив, и, как было предложено, как только я изменили его, чтобы вывести реальный результат, теперь он работает... Спасибо, ребята

Alex Holmes 09.07.2024 20:34

@Barmar, вместо того, чтобы предлагать советы по решению проблем в комментариях, используйте свой молоток для обмана, чтобы ответы не публиковались, а ненужные страницы могли автоматически удаляться Roomba.

mickmackusa 15.07.2024 03:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
28
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Измените следующую строку:

$output['data'] = [];

К этому:

$output['data'] = $query->get_result()->fetch_all();

И вы должны получить нужные данные.

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