我想使用AJAX从PHP接收数据,PHP要求数据库提供一些数据。我从AJAX获得的全部是NULL
。
当我警告结果(例如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
标头或其他技术。到目前为止,没有任何帮助。
答案 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[]
行