无法使用AJAX调用找到$ wpdb变量

时间:2018-01-01 09:58:18

标签: javascript php ajax wordpress

我在PHP for Wordpress中创建一个应用程序,此时,我每两秒钟尝试通过AJAX从数据库中获取一个值,并且我已经创建了一个新文件应该被触发的功能。

<?php
global $wpdb;
function conta(){
    global $wpdb, $table_name;
    $count = $wpdb->get_var("SELECT contatore FROM $table_name WHERE email = '$mail'");
    echo "$count";
}
conta()
?>

这里使用XMLHttpRequest对象每2秒调用一次此函数

    setInterval(function () {
    var url = <?php echo json_encode($con); ?>;
    var valuereq = new XMLHttpRequest();
    valuereq.open("GET", url, true);
    valuereq.send();
    valuereq.status;
    valuereq.onreadystatechange = function () {
        if (valuereq.readyState == 4 && valuereq.status == 200) {
            var return_data = valuereq.responseText;
            document.getElementById("conta").innerHTML = "Executed: " + return_data;
        }
        else document.getElementById("conta").innerHTML = "Error";
    }

}, 2000);

Http请求正确执行,但我收到此错误:

Fatal error: Uncaught Error: Call to a member function get_var() on null in
C:\xampp\apps\wordpress\htdocs\wp-content\plugins\bittrex-
trader\admin\partials\conta.php:7 Stack trace: #0 
C:\xampp\apps\wordpress\htdocs\wp-content\plugins\bittrex-
trader\admin\partials\conta.php(11): conta() #1 {main} thrown in 
C:\xampp\apps\wordpress\htdocs\wp-content\plugins\bittrex-
trader\admin\partials\conta.php on line 7

程序无法找到全局变量$ wpdb,即使已声明。这只发生在AJAX请求中,因为如果我直接包含文件$ wpdb被找到并正常工作。 有原因吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的$mail变量未在conta()函数中设置,但您使用它执行查询。

使用此方法加载基本wordpress(仅加载wordpress核心),以便您可以使用$wpbd

<?php

    // use this flag to load only wordpress core
    define( 'SHORTINIT', true );
    // find the wp-load.php file and require it
    require( '/path/to/wp-load.php' );

    // now you can use $wpdb


    function conta($wpdb, $table_name, $mail)
    {
       $count = $wpdb->get_var("SELECT `contatore` FROM `".$table_name."` WHERE `email` = '".$mail."'");
       echo "$count";
    }

    // call the function and pass the parameters
    conta($wpdb, $table_name, $mail);

    // close connection
    $wpdb->close();
?>

更多关于worpdress core here的标志。