2012-05-14 104 views
7

我有一個問題,我堅持了幾天... 我試圖用一個簡單的ajaxPOST函數發送數據到MySQL數據庫(不是WP數據庫)。如何添加ajax到wordpress主題

此代碼位於主題中的「single-post.php」中,因爲它必須在每篇文章之前進行檢查。

$.ajax({ url: 'library/functions/admin_checkuser.php', 
    data: {action: userID}, 
    type: 'post', 
    success: function(output) { 
        alert(output); 
    } 
}); 

我只是發送一個變量到「admin_checkuser.php」腳本,後者又調用另一個腳本,使數據庫上的操作。

這是「admin_checkuser」代碼:

$userid = $_POST['action']; 

echo $userid;//for testing 
$oMySQL = new MySQL(); 
$query = "Select * FROM videotable WHERE uid = '$userid'"; 
$oMySQL->ExecuteSQL($query); 
$bb = $oMySQL->iRecords; 
$aa = $oMySQL->aResult; 
echo $bb; 

if ($bb == 0){ 
$query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
$oMySQL->ExecuteSQL($query); 
echo 'true'; 
    exit(); 

}else{ 
$sharing = mysql_result($aa,0,"share"); 
echo $sharing; 
exit(); 

} 

但我不認爲呼叫經歷的腳本。 這些腳本在WordPress之外進行測試並且可以正常工作,所以它必須是阻止ajax調用的WordPress的東西。 順便說一句,我試着把「admin_checkuser.php」放在很多不同的文件夾中,但沒有任何工作。

在此先感謝。

+1

使用類似Firebug的net tab或HTTPFox來查看是否實際發生ajax調用 - 或者觀察服務器的訪問日誌。 –

回答

2

你應該檢查你的網址爲你的ajax調用。

也許使用完整的網址而不是相對的網址。

這可能是因爲你的主題的位置使得url不正確。我假設你的ajax代碼在你的主題文件夾中。

有一些wordpress函數可以獲取主題目錄。

例如,如果你在這個頁面http://yourwebpage/test/那麼ajax調用將在這裏http://yourwebpage/test/library/functions/admin_checkuser.php。我認爲這將是不正確的位置。

這就是爲什麼您需要將絕對URL添加到您的腳本。如果它在您的主題中,則可以使用此方法get_template_directory_uri()來獲取模板目錄。

在這裏看到:http://codex.wordpress.org/Function_Reference/get_template_directory_uri

+0

10x很多!我浪費了很多時間在這 – user1108310

24

你好得多使用內置的WordPress的Ajax請求。

在你的主題

所以functions.php文件,添加你要調用的函數,例如:

function checkUser() { 

    $userid = $_POST['user']; //validation also :) 
    $oMySQL = new MySQL(); 
    $query = "Select * FROM videotable WHERE uid = '$userid'"; 
    $oMySQL->ExecuteSQL($query); 
    $bb = $oMySQL->iRecords; 
    $aa = $oMySQL->aResult; 
    echo $bb; 

    if ($bb == 0){ 
    $query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
    $oMySQL->ExecuteSQL($query); 
    echo 'true'; 
     exit(); 

    } else { 
    $sharing = mysql_result($aa,0,"share"); 
    echo $sharing; 
    exit(); 

    } 
} 

之後,你所連接到內置的AJAX系統

add_action('wp_ajax_check_user', 'checkUser'); 
add_action('wp_ajax_nopriv_check_user', 'checkUser'); 

wp_ajax_nopriv_%s添加你的鉤子允許從前端調用它。

然後,在您的JavaScript文件中,您只需觸發您的ajax請求。

$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) { 
    alert(output); 
}); 

如果ajaxurl是不確定的,你需要在你的模板文件中,這樣的事情應該工作來創建它,但也有其他方式。

add_action('wp_head','ajaxurl'); 
function ajaxurl() { 
?> 
<script type="text/javascript"> 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
</script> 
<?php 
} 

wordpress的後端完成剩下的工作。

它發生在AJAX請求通過了行動,查找對應的`wp_ajax(_nopriv)_%s鉤,然後調用分配給鉤子函數。

它也將通過在任一$_POST$_GET根據AJAX請求的類型。

您可以閱讀更多關於使用AJAX inside of Wordpress的信息。

+0

感謝您的偉大答案!在那裏我應該把「add_action」,在管理 - 阿賈克斯?把它扔到那裏? – user1108310

+0

這只是在主題的'functions.php'文件中,在函數定義之下或之下是很好的保持有序! – Stoosh

+0

是的,我同意Stoosh在這裏。走這條路線會更好。 – Gohn67

相關問題