8

我有一个问题困扰了好几天......我正在尝试使用一个简单的 ajaxPOST 函数将数据发送到 MySQL 数据库(而不是 WP 数据库)。

此代码位于主题中的“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 之外进行了测试并且确实有效,因此它必须是 WordPress 中阻止 ajax 调用的东西。顺便说一句,我尝试将“admin_checkuser.php”放在许多不同的文件夹中,但没有任何效果。

提前致谢。

4

2 回答 2

28

你最好使用内置的 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钩子,然后调用分配给钩子的函数。

它还将根据 AJAX 请求的类型传入$_POST或传入。$_GET

您可以阅读更多关于在 Wordpress 中使用 AJAX 的信息

于 2012-05-14T19:13:00.580 回答
2

您应该检查您的 ajax 调用的 url。

也许使用完整的 url 而不是相对的。

这可能是因为您的主题的位置使 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

于 2012-05-14T18:52:18.623 回答