来自PHP响应的jQuery AJAX请求为空

时间:2019-04-21 19:21:28

标签: php jquery ajax

我想使用AJAX从PHP接收数据,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中有很多可能的解决方案。在PHP代码中使用echo代替return,适当的application/json标头或其他技术。到目前为止,没有任何帮助。

2 个答案:

答案 0 :(得分:1)

问题是$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] ...即访问第一个数组元素。


编辑

为清楚起见,在评论后...尝试以下操作:

$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


第二次编辑

在聊天中进行了广泛(但愉快的)调试之后...我们发现了ajax data错误。

应该是:

data: {editid: editid}, // to have the id in $_GET['editid']

答案 1 :(得分:0)

在while循环内添加$return[]