2014-03-19 78 views
0

這是我第一次試圖用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(); 
} 
?> 

回答

0

僅僅因爲你請求的頁面200(OK)獲得,並不意味着請求的頁面沒」噸錯誤:)其次,它看起來像這將在Wordpress中使用......與這樣說,你不能使用add_action沒有加載wordpress。

對於正常wordpress安裝以外的文件,例如,您需要包含wp-load.php include "/path/to/wordpress/wp-load.php"。然後你可以使用它的功能。

+0

啓動ajax的鏈接位於我的wordpress主題中的頁面模板中。 jQuery文件和其中包含SQL語句的php位於插件文件夾中。所以在插件運行的時候,wp-load會不會被調用? – TripsLeft

+0

請記住,服務器是無狀態的。如果你只是調用ajax文件(並且ajax文件不包含與WP相關的任何內容),那麼它將不起作用。僅僅因爲調用者在WP中運行,並不意味着被調用者會。 –

+0

感謝你對我的支持。我試過了,但仍然無法正常工作。這很奇怪,因爲我有一個幾乎相同的文件,可以在與此文件相同的文件夾中成功插入數據庫。唯一的區別是動作和sql查詢的名稱。 – TripsLeft

0

更新查詢後,將代碼放在下面,直接在mysql中檢查查詢。

print_r($wpdb->last_query); 

在這裏也提供您的查詢,如果它不工作。

+0

這是一個初學者的問題,但它是ajax,我必須修改它將打印出來的位置嗎? – TripsLeft

+0

它將在控制檯中打印。 –

相關問題