【发布时间】:2016-11-07 19:28:58
【问题描述】:
所以我正在开发一个 WordPress 网站。我很难让用户输入更新数据库。
JS:
var ID = $(this).attr('id');
var name = $("#name_input_"+ID).val();
var createDate = $("#created_input_"+ID).val();
var stats = $("#status_input_"+ID).val();
var dateExpire = $("#disbanded_input_"+ID).val();
var dataString = 'id=' + ID + '&name=' + name +
'&createDate=' + createDate + '&stats=' + stats + '&dateExpire=' + dateExpire;
// can place loading image here
if (name.length > 0 || createDate.length > 0 ||
stats.length > 0 || dateExpire.length > 0) {
$.ajax({
type: "POST",
url: "../edit-items.php",
data: dataString,
cache: false,
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
},
success: function (html) {
$("#name_"+ID).html(name);
$("#createDate_"+ID).html(createDate);
$("#stats_"+ID).html(stats);
$("#dateExpire_"+ID).html(dateExpire);
}
});
} else {
alert("Enter text to make an edit.");
}
});
PHP (edit-items.php)
global $wpdb;
if($_POST['id']) {
$id = esc_sql($_POST['id']);
$name = esc_sql($_POST['name']);
$created = esc_sql($_POST['createDate']);
$stats = esc_sql($_POST['stats']);
$dateExpire = esc_sql($_POST['dateExpire']);
$query = "UPDATE items SET itemName='$name', createDate='$created', itemStats='$stats', dateExpire='$dateExpire' WHERE committee_id='$id';"
$wpdb->query($wpdb->prepare($query));
}
每当我尝试更新表时,我都能在前端成功完成,但在刷新时,数据更改不会粘住。检查数据库进一步验证数据没有被改变......似乎“成功”正在AJAX中传递,但由于某种原因,它没有更新数据库。
对此的任何见解都会有所帮助!
编辑
决定开始使用admin-ajax.php方法。一切都一样,除了我将 JS 中的 url 更改为 url: "/wp-admin/admin-ajax.php", 并且来自 edit-items.php 的代码现在在 functions.php 中,如下所示:
function editCommittee() {
global $wpdb;
if($_POST['id']) {
$id = esc_sql($_POST['id']);
$name = esc_sql($_POST['name']);
$created = esc_sql($_POST['createDate']);
$stats = esc_sql($_POST['stats']);
$dateExpire = esc_sql($_POST['dateExpire']);
$wpdb->update('itemsTable',
array(
'name' => $name
),
array(
'committee_id' => $id
),
array(
'%s'
)
);
echo $id;
exit();
}
}
add_action('wp_ajax_editItems', 'editItems');
【问题讨论】:
-
您传递的是字符串格式,您无法访问 $_post['id'],而不是像 Tomsaz 建议的那样传递 json 并在 json 中添加另一个键,操作:'editCommittee' 和 echo 'success ';然后死去;在 php 函数的末尾 editCommittee @sleepy_daze
-
我在我的 JS 文件中设置了以下内容:
data: dataString,dataType: 'json',action: 'editCommittee'。还在editCommittee()函数的末尾添加了or die();。我发现如果我从functions.php中删除查询,我不会收到 500 Internal Server Error。也许我的查询有问题? -
尝试回显查询并在 mysql 中运行,我看到的一个错误是你是 @sleepy_daze 中的字符串形式的委员会 ID
-
感谢您的收获,@parthmahida!我已经走得更远了,请查看我上面的代码编辑。不再出现 500 个内部错误,并且我能够看到 HTTP 响应标头。似乎数据正在通过
admin-ajax.php很好。但是,每当我在前端编辑数据时,它都会以GET请求而不是POST的形式成功通过...有什么想法吗?