Не возвращает данные из php в JavaScript

#javascript #php #mysql

#javascript #php #mysql

Вопрос:

Я работаю над проектом, который использует JavaScript (AJax) для вызова php-файла для запроса сервера MySQL. Я отследил вызов php и вижу, что он работает, но вызов AJax никогда ничего не получает. ниже приведен мой код JavaScript и PHP, может кто-нибудь взглянуть на него и сказать мне, чего мне не хватает.

JavaScript:

 $(function() {
    $('#members').on('input', function() {
        var opt = $('option[value="' $(this).val() '"]');
        /*getMember(opt.length ? opt.attr('id'): 0);*/
        $.ajax({
            url: 'data/members.php',
            type: 'POST',
            data: {'action':'get', 'status':opt.attr('id')},
            sucess: function(data) {
                alert(data);
            },
            error: function() {
                alert("We have a problem");
            }
        });
    });
});
  

php:

 $action = $_POST["action"];

if ($action == "get") {
    $memberID = $_POST["status"];
    try {
        require "../../classes/data.php";
        $data = new data();
        $conn = $data->connect();
        $sql = "SELECT * FROM members WHERE memberID = " . $memberID;
        $result = $data->query($sql);
        while($row = $result->fetch_assoc()) {
            $returnData = $row;
        }
        echo $returnData;
    } catch (Exception $ex) {

    }
}
  

Комментарии:

1. Вы пытаетесь отобразить ассоциативный массив? json_encode Для начала нужно посмотреть.

2. Указывает ли консоль вашего браузера на какие-либо ошибки?

3. Пробовал с json_encode и без, оба не работают.

4. Что указывает консоль вашего браузера? Там появляются какие-либо ошибки? Добавьте console.log(opt.attr(‘id’)) после вашего оператора var opt и посмотрите, что появляется в вашей консоли при выполнении кода.

5. Вы просматривали журналы сервера, чтобы узнать, не сбой ли вашего php? Есть ли у вас какие-либо инструменты в браузере, установленные для просмотра связи между браузером и сервером? Какую отладку вы выполнили?

Ответ №1:

У вас синтаксическая ошибка:

Заменить:

 url: 'data/members.php';
  

для этого:

 url: 'data/members.php',
  

‘,’ в конце

Комментарии:

1. Просто поймал это, просто опечатка, это прямо на коде, запущенном на сервере, который все еще не работает.

Ответ №2:

Часть PHP

 // You have SQL injection here
$sql = "SELECT * FROM members WHERE memberID = " . $memberID; 
$result = $data->query($sql);
while($row = $result->fetch_assoc()) {
    // You probably want this as array 
    $returnData = $row;
}
// use json_encode
echo json_encode($returnData);
  

Часть JS:

 $.ajax({
    url: 'data/members.php',
    type: 'POST',
    // add data type here
    dataType: 'JSON',
    data: {'action':'get', 'status':opt.attr('id')},
    sucess: function(data) {
        ...
    }
});
  

Комментарии:

1. Борис, когда я использую NetBeans XDebug I и следую php-коду строка за строкой, данные, отправляемые из AJax, являются правильными (массив из 2 пар значение-> ключ), а затем я выполняю sql-код для запроса базы данных, все работает правильно. $returnData превращается в любой массив с одной записью (это то, что я ищу). Я попытался добавить json_encode, и что бы ни случилось, успех ajax никогда не срабатывает. Я попытался использовать alert для получения результатов и попытался заполнить форму, для которой предназначены данные.

2. ‘#members’ — это поле выбора? попробуйте использовать ‘$(‘#members’).on(‘change’, function() {‘ и вы можете получить текущее значение, выбрав поле выбора с помощью ‘$(this).val()’ вместо ‘$(‘#members’).on(‘input’,function() {‘, если это не работает, вам нужно будет опубликовать больше кода

Ответ №3:

Как только я научусь писать, жизнь будет хорошей …. была опечатка в javascript … имел успех как успех, неудивительно, что он никогда не срабатывал. Теперь еще один вопрос: данные возвращаются в массив: array как мне получить доступ к данным? Если я использую data [«ключ»] Я ничего не получаю. Если я оповещаю данные, я получаю все данные, возвращенные из mysql.

 $(function() {
$('#members').on('input', function() {
    var opt = $('option[value="' $(this).val() '"]');
    /*getMember(opt.length ? opt.attr('id'): 0);*/
    $.ajax({
        url: 'data/members.php',
        type: 'POST',
        data: {'action':'get', 'status':opt.attr('id')},
        success: function(data) {
            alert(data);
        },
        error: function() {
            alert("We have a problem");
        }
    });
});
  

});

Ответ №4:

Получает ли данные запись в виде массива. Как указал Борис

 while($row = $result->fetch_assoc()) {
    // You probably want this as array 
    $returnData = $row;
}
  

$returnData всегда получает последнюю строку при перезаписи.

вам нужно закодировать это следующим образом.

 $returnData = [];
while($row = $result->fetch_assoc()) {
        // You probably want this as array 
        array_push($returnData,$row);
    }
  

И когда результат возвращается в javascript, вам нужно использовать JSON.parse

 $.ajax({
        url: 'data/members.php',
        type: 'POST',
        data: {'action':'get', 'status':opt.attr('id')},
        success: function(data) {
            var result = JSON.parse(data);
            alert(data);
        },
        error: function() {
            alert("We have a problem");
        }
    });