這是我第一次試圖用ajax & wordpress更新數據庫。我試圖在單擊鏈接時將字段設置爲「完成」狀態。一切似乎都很順利,我從控制檯得到了「200好」的迴應,而且jQuery甚至展示了我正在採取的成功行動。但是php不更新數據庫。正確的變量正在被回顯到控制檯,所以我知道這些變量正確設置。我不知道這是我正在嘗試的MySQL查詢,還是我忽略了某些內容。任何幫助或建議將不勝感激。WordPress的表格不會在AJAX/PHP後更新(即使有200 OK響應)
這裏是我的jQuery:
// Click to Complete Activity Functionality
jQuery(".complete-activity").click(function(e) {
e.preventDefault();
nonce = jQuery(this).attr("data-nonce")
wp_user_id = jQuery(this).attr("wp_user_id")
activity_post_id = jQuery(this).attr("activity_post_id")
wp_user_id = parseInt(wp_user_id);
activity_post_id = parseInt(activity_post_id);
console.log('My wp user id is: ' + wp_user_id);
console.log('My Activity id is: ' + activity_post_id);
jQuery.ajax({
type : "post",
url : myAjax.ajaxurl,
data : {
action: "gw_complete_activity",
"wp_user_id" : wp_user_id,
"activity_post_id" : activity_post_id,
"nonce" : nonce
},
success: function(response) {
console.log('Your field has been set as completed');
jQuery('li#active-'+ activity_post_id).css('display', 'none');
}
})
}) // End click to complete activity
這裏是我的PHP代碼:
<?php
//Complete Activity in Database (AJAX)
add_action("wp_ajax_gw_complete_activity", "gw_complete_activity");
add_action("wp_ajax_nopriv_gw_complete_activity", "my_must_login_to_complete");
function gw_complete_activity() {
if (!wp_verify_nonce($_REQUEST['nonce'], "gw_complete_activity")) {
exit("No naughty business please");
}
$wp_user_id = $_REQUEST['wp_user_id'];
$activity_post_id_complete = $_REQUEST['activity_post_id'];
$date_completed = current_time('mysql', 1);
global $wpdb;
$wpdb->update (
'wp_gwactivities',
array('date_completed' => $date_completed, 'activity_status' => 'complete'),
array('wp_user_id' => $wp_user_id)
);
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$result_add = json_encode($result_add);
echo $result_add;
}
else {
header("Location: ".$_SERVER["HTTP_REFERER"]);
}
die();
}
function my_must_login_to_complete() {
echo "You must be logged in to complete your activities.";
die();
}
?>
啓動ajax的鏈接位於我的wordpress主題中的頁面模板中。 jQuery文件和其中包含SQL語句的php位於插件文件夾中。所以在插件運行的時候,wp-load會不會被調用? – TripsLeft
請記住,服務器是無狀態的。如果你只是調用ajax文件(並且ajax文件不包含與WP相關的任何內容),那麼它將不起作用。僅僅因爲調用者在WP中運行,並不意味着被調用者會。 –
感謝你對我的支持。我試過了,但仍然無法正常工作。這很奇怪,因爲我有一個幾乎相同的文件,可以在與此文件相同的文件夾中成功插入數據庫。唯一的區別是動作和sql查詢的名稱。 – TripsLeft