如何在WordPress中用AJAX请求更改PHP变量

时间:2020-08-22 作者:dylzee

我有一个带有选择框的html表单,我想根据用户的选择显示不同的数据。

我真正需要做的就是根据选择在php中更改1个变量。

我进行了一个外部API调用,返回数据并将其显示在html表中。我想根据用户的选择更改api调用的一小部分(get uri中的id)。

有没有简单的方法可以做到这一点?

我已经完成了jquery并使用wordpress将其排队,当更改select box值时,我得到了200个响应。但我似乎无法更改PHP。

为了避免代码轰炸,我修改了回调函数,以给出一个我希望发生的示例。非常感谢您的反馈。谢谢

HTML

    <form class="choose-site" action="" method="post">
      <select id="choose-site" name="site-choice">
        <option value="site1"><?php echo $primary_site ?></option>
        <option value="site2"><?php echo $site_2 ?></option>
      </select>
    </form>

<div id="test123">
    <p><?php echo $msg; ?></p>
    </div>
JQUERY

(function($) {
    $(document).ready(function() {
        
        $("#choose-site").on("change",function() {
            const val = this.value;
             if (val) {
                 $.ajax({
                    type : "post",
                    dataType : "JSON",
                    url: my_ajax_object.ajax_url,
                    data : { 
                        action: "my_ajax_action"
                },
                success: function(data) {
        $("#test123").html(data);
      }
            });
        }});
    });
})(jQuery);
函数中的PHP。php

<?php

add_action( \'wp_ajax_my_ajax_action\', \'users_details_callback\' );
add_action( \'wp_ajax_nopriv_my_ajax_action\', \'users_details_callback\' );

function users_details_callback() {

 if (isset($_POST[\'site-choice\']) && $_POST[\'site-choice\'] == \'site1\') {

$msg = "hi";
    
}

if (isset($_POST[\'site-choice\']) && $_POST[\'site-choice\'] == \'site2\') {
$msg = "bye";
}

wp_die();
return $msg;

}
?>
有没有办法更改$msg的值并将其发送回HTML?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

是否有方法更改$msg 并将其发送回HTML?

您的代码基本上已经在这样做了,但存在一些问题:

您的AJAX JS(jQuery.ajax()) 未发送名为的帖子数据site-choice 到AJAX PHP回调(users_details_callback()) 通过以下方式读取数据$_POST[\'site-choice\'].

您的AJAX PHP回调将导致WordPress回显零(0) 因为你在打电话wp_die() 在返回任何输出之前wp_die() 你应该echo 输出与否return

您的AJAX JS需要从服务器返回JSON数据(因为您设置了dataTypeJSONdataType : "JSON"), 因此,AJAX PHP回调应该返回有效的JSON响应。

因此,要解决这些问题:

在PHP函数中(users_details_callback()), 您可以使用wp_send_json_success() 发送JSON响应而无需调用wp_die(): (注意,我还优化了if 条件)

function users_details_callback() {
    if ( isset( $_POST[\'site-choice\'] ) ) {
        $msg = \'\';

        if ( $_POST[\'site-choice\'] == \'site1\' ) {
            $msg = \'hi\';
        } elseif ( $_POST[\'site-choice\'] == \'site2\' ) {
            $msg = \'bye\';
        }

        wp_send_json_success( $msg );
    }

    // Send an error if we receive an invalid data.
    wp_send_json_error( \'your error\' );
}
jQuery.ajax() (或$.ajax()) 电话:

$.ajax( {
    ...
    data: {
        action: \'my_ajax_action\',
        // Send the site-choice data.
        \'site-choice\': $( \'#choose-site\' ).val(),
    },
    success: function( data ) {
        // \'data\' is now an object and the $msg value from the server is put in
        // data.data, so use that instead of just \'data\'.
        $( \'#test123\' ).html( data.data );
    },
} );

相关推荐

WordPress不加载jQuery

我想将WordPress与引导一起使用,但WordPress无法正确加载jQuery,因此我收到以下错误消息:未捕获的TypeError:引导程序的JavaScript需要jQuery。jQuery必须包含在引导程序的JavaScript之前。这是我的职能。php:function add_theme_scripts() { wp_enqueue_style(\'bootstrap\', \'https://stackpath.bootstrapcdn.com/bootstrap/4.5.