在AJAX / PHP之后Wordpress表不会更新(即使有200个ok响应)

时间:2014-03-19 13:19:31

标签: php jquery mysql ajax wordpress

这是我第一次尝试使用ajax&更新数据库。 WordPress的。我正在尝试将字段设置为“完成”状态。单击链接时。一切似乎都很顺利,我得到了一个好的" 200 ok"来自控制台的响应,jQuery甚至显示了我正在采取的成功行动。然而,php并没有更新数据库。正确的变量正在回显到控制台,所以我知道正确设置了这些变量。我不知道我的MySQL查询是否是我正在尝试的,或者是否有我忽视的东西。任何帮助或建议将不胜感激。

这是我的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();
}
 ?>

2 个答案:

答案 0 :(得分:0)

只是因为你从请求的页面得到200(OK),并不意味着请求的页面没有错误:)其次,看起来这将在Wordpress中使用...用那说,如果没有加载wordpress,就无法使用add_action

对于正常wordpress安装之外的文件,您需要包含wp-load.php include "/path/to/wordpress/wp-load.php"。然后你可以使用它的功能。

答案 1 :(得分:0)

更新查询后,将下面的代码放入mysql中直接检查查询。

print_r($wpdb->last_query);

如果不起作用,请在此处提供您的查询。