Как получить определенный элемент обратного вызова (массив) AJAX SQL к переменным? - PullRequest
0 голосов
/ 22 сентября 2019

Когда пользователь щелкает ссылку в панели навигации моего веб-приложения, имя ссылки присваивается переменной javascript ('team').Затем переменная отправляется в php через AJAX «POST», чтобы использовать ее для запроса mySQL, чтобы заполнить информационную панель новыми данными.У меня все работает, кроме функции успеха AJAX.

Когда я пытаюсь получить входные данные панели мониторинга для обновления html div, я не могу правильно получить необходимую информацию, которая отправляется в виде массива в обратном вызове.

В соответствии с отладкой сети инструмента разработчика iиметь следующий массив json в качестве обратного вызова в части php:

array(7) { ["team_id"]=> string(1) "2" ["name"]=> string(17) "Borussia Dortmund" ["logo"]=> string(56) "https://github.com/Phanti1893/dasocc/blob/master/165.png" ["founded"]=> string(4) "1909" ["venue_capacity"]=> string(5) "81365" ["squad_value"]=> string(3) "634" ["total_national_trophies"]=> string(2) "12" }

Когда я использую следующую функцию успеха, я просто получаю 'y' в html-контейнере (который, очевидно, является 4-м индексным показателем вобратный вызов в «массиве»).Здесь я хочу получить отдельные элементы в массиве, чтобы заполнить мою панель мониторинга на внешнем интерфейсе (.selectedClub - один из многих примеров):

$('ul.subbar li a').on('click', function(e) { // Start function when user clicks on a team in the navbar
e.preventDefault(); // Stop loading new link?
var team = $(this).html(); // Assign clicked team name to variable
$.ajax({
  method: "POST",
  url: "includes/script.php",
  data: {team: team},
  data_type: "json",
  success: function(data) {

    $('.selectedClub').html(data[4]);


    }


  });


console.log(team); // check for console, remove later




});

это мой php-скрипт, который делает SQL-запрос с переменной'team':

<?php
  include_once 'dbh.inc.php';

   if (isset($_POST['team'])) {
     $team = $_POST['team'];

  $sql = "SELECT * from teams WHERE name = '$team';"; // task sent to server
  $result = mysqli_query($conn, $sql); // returns object resource
  $teamarray = $result->fetch_assoc(); // pass object to an array
  $name = $teamarray ["name"];
  $logo = $teamarray ["logo"];
  $founded = $teamarray ["founded"];
  $venue_capacity = $teamarray ["venue_capacity"];
  $squad_value = $teamarray ["squad_value"];
  $total_national_trophies = $teamarray ["total_national_trophies"];

var_dump($teamarray);

}
?>

РЕДАКТИРОВАТЬ: Я думаю, проблема в том, что я не получаю массив JSON в ответ, а простой HTML / текст из-за инструментов разработчика Chrome:

Connection: Keep-Alive
Content-Length: 341
Content-Type: text/html; charset=UTF-8
Date: Sun, 22 Sep 2019 09:11:57 GMT
Keep-Alive: timeout=5, max=97
Server: Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.3.9
X-Powered-By: PHP/7.3.9

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

После двух дней отладки он теперь работал следующим образом: ключ заключался в том, чтобы закодировать объект SQL в массив JSON и разобрать его в коде javascript, чтобы можно было правильно захватить данные.

Спасибо затем не менее, ваш вклад очень важен.

javascript / AJAX:

$('ul.subbar li a').on('click', function(e) { // Start function when user clicks on a team in the navbar
e.preventDefault(); // Stop loading new link?
var team = $(this).html(); // Assign clicked team name to variable
$.ajax({
  method: "POST",
  url: "includes/script.php",
  data: {team: team},
  data_type: "json",
  success: function(team) {

    team = $.parseJSON(team);
    console.log(team);
    $('.selectedClub').html(team.name);
    $('#founded').html(team.founded);
    $('#venue_capacity').html(team.venue_capacity);
    $('#squad_value').html(team.squad_value);
    $('#total_national_trophies').html(team.total_national_trophies);
    $('#teamlogo').attr({src: team.logo});


    }

  });

});
<?php

  include_once 'dbh.inc.php';

   if (isset($_POST['team'])) {
     $team = $_POST['team'];

  $sql = "SELECT * from teams WHERE name = '$team';"; // task sent to server
  $result = mysqli_query($conn, $sql); // returns object resource
  $teamarray = $result->fetch_assoc(); // pass object to an array
  $name = $teamarray ["name"];
  $logo = $teamarray ["logo"];
  $founded = $teamarray ["founded"];
  $venue_capacity = $teamarray ["venue_capacity"];
  $squad_value = $teamarray ["squad_value"];
  $total_national_trophies = $teamarray ["total_national_trophies"];

echo json_encode($teamarray); // changes object into json format
//var_dump($teamarray);

}
?>
0 голосов
/ 22 сентября 2019

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

Я не могу понять, почему вы ожидали, что данные [4] будут "y"

Я предлагаю вам консоль записать возвращенные данные, чтобы увидеть, что именно возвращается из вызова Ajax.Я не использую php, но похоже, что возвращенное значение, которое вы видели, является объектом, а не массивом, и вы, возможно, захотите получить доступ к data.name вместо элемента массива, но сначала запишите его в лог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...