【问题标题】:unable to find $wpdb variable with AJAX call无法通过 AJAX 调用找到 $wpdb 变量
【发布时间】:2018-06-11 10:25:27
【问题描述】:

我正在 PHP 中为 Wordpress 创建一个应用程序,此时,我尝试每 2 秒通过 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()
?>

这里每 2 秒调用一个 XMLHttpRequest 对象的函数

    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 文件,则会找到并正常工作。 有原因吗? 提前谢谢你。

【问题讨论】:

  • 您是否将变量$wpdb 设置的文件包含在其中?
  • 在函数conta()中,你在哪里声明或赋值给变量$mail
  • $wpdb 是 wordpress 的全局变量,它应该在 wordpress 插件文件中可用。我已经在项目的其他文件中使用过很多次了。
  • $mail 仍未声明,但这不是问题,因为它找不到 $wpdb。我想稍后在没有帮助的情况下解决这个问题。

标签: javascript php ajax wordpress


【解决方案1】:

您的$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();
?>

更多关于 wrpdress 核心 here 的标志。

【讨论】:

  • @FilippoMomentè 没问题,很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 2023-04-09
  • 2019-03-11
相关资源
最近更新 更多