AJAX-запрос через jQuery из PHP-ответов null - PullRequest
1 голос
/ 21 апреля 2019

Я хочу получать данные, используя AJAX из PHP, который запрашивает в базе данных некоторые данные.Все, что я получаю от AJAX, это NULL.

received from Firefox Debugger

Когда я оповещаю результат (например, data.name), он говорит undefined.

HTML, AJAX и jQuery находятся в index.php, а PHP в edit.php -.

Я использую AJAX-запрос ...

$('div[data-toggle="edit"]').click(function() {
    var editid = $(this).attr('id').replace('edit','');
    $.ajax({
        cache: false,
        type: 'GET',
        url: 'edit.php',
        data: editid,
        dataType: 'JSON',
    }).done(function(data) {
        $('#mainlabel').modal('show');
        $('input[name=add_name]').val(data.name);
        $('input[name=add_date]').val(data.date);
        $('input[name=add_image]').val(data.image);
        $('input[name=add_info]').val(data.info);
    }).fail(function(jqXHR, message) {
        alert(message);
    });
});

... дляполучать данные из этого кода PHP.

<?php
    require_once('main.conf');
    require_once('db.php');

    $stmt = $con->prepare("SELECT * FROM datas d WHERE d.dataid = ?");
    $stmt->bind_param("i", $_GET["editid"]);
    $stmt->execute();
    $result = $stmt->get_result();
    $stmt->close();

    while ($row = $result->fetch_assoc()) {
        $editname  = $row["name"];
        $editdate  = date("Y-m-d", strtotime($row["date"]));
        $editimage  = $row["image"];
        $editinfo  = $row["additionalinfo"];
    }

    $return[] = array("name" => $editname,
                      "date" => $editdate,
                      "image" => $editimage,
                      "info" => $editinfo,
                      "getid" => $_GET["editid"]); //only for debugging

    header('Content-Type: application/json; charset=UTF-8');
    echo json_encode($return);
?>

Когда я вызываю этот код вручную через edit.php?editid=547, JSON-результат выглядит так, как должен.

0   
    name    "Mike Minus"
    date    "2015-05-12"
    image   "employee.jpg"
    info    "some additional info"
    getid   "547"

С ожидаемой информацией яЯ хочу заполнить некоторые поля ввода.

<div class="modal-body mx-3">
    <div class="form-group">
        <label for="add_name" class="col-form-label">Name:</label>
        <input class="form-control validate" type="text" name="add_name" value="">
    </div>
    <div class="form-group">
        <label for="add_name" class="col-form-label">Datum:</label>
        <input class="form-control" type="date" name="add_date" size="8" value="">
    </div>
    <div class="form-group">
        <label for="add_image" class="col-form-label">Bild:</label>
        <input class="form-control" type="text" name="add_image" value="">
    </div>
    <div class="form-group">
        <label for="add_info" class="col-form-label">Zusatzinfos:</label>
        <input class="form-control" type="text" name="add_info" value="">
    </div>
</div>

<div class="btn btn-info btn-sm" data-toggle="edit" id="edit547">
    <i class="fa fa-pencil-square-o"></i>
</div>

Я знаю, что в SO достаточно много возможных решений.Используя echo вместо return в коде PHP, соответствующий заголовок application/json или другие методы.Ничто не может помочь до сих пор.

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

Вопрос: $return[] = ... (квадратные скобки).

Попробуйте $return = ....

Эти скобки определяют переменную как массив ... Затем вы присваиваете ей другой массив.

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

Если вы хотите это проверить, оставьте квадратные скобки и попробуйте следующий успешный обратный вызов ajax:

.done(function(data) {
    $('#mainlabel').modal('show');
    $('input[name=add_name]').val(data[0].name);
    $('input[name=add_date]').val(data[0].date);
    $('input[name=add_image]').val(data[0].image);
    $('input[name=add_info]').val(data[0].info);
})

Обратите внимание на [0] ... То есть для доступа к первому элементу массива.


EDIT

Для ясности, после комментариев ... Попробуйте это:

$row = $result->fetch_assoc();
$editname  = $row["name"];
$editdate  = date("Y-m-d", strtotime($row["date"]));
$editimage  = $row["image"];
$editinfo  = $row["additionalinfo"];

$return = array("name" => $editname,
                  "date" => $editdate,
                  "image" => $editimage,
                  "info" => $editinfo,
                  "getid" => $_GET["editid"]); //only for debugging


2-е РЕДАКТИРОВАНИЕ

После обширной (но приятной) отладки в чате ... Мы прибили ошибку ajax data.

Должно быть:

data: {editid: editid}, // to have the id in $_GET['editid']
0 голосов
/ 21 апреля 2019

Включить строку $return[] внутри цикла while

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