通过AJAX传递javascript变量后重置PHP变量

时间:2019-04-09 20:45:46

标签: javascript php ajax wordpress scope

我正在尝试在Wordpress中使用PHP进行一些SQL查询,以自动填充并根据现有数据库检查重力形式的值。

但是,要做到这一点,我需要将一些javascript变量传递给php,然后使用它进行交互并将该数据拉回到表单中。作为具有最低Web开发背景的人,说起来容易做起来容易。

我的主要问题是一个AJAX调用,该调用正确地传递了一个值,但仅传递给动作函数。所有其他呼叫都将显示为空(我想是由于范围限制,但全局变量似乎无济于事)。

主要相关的PHP在自定义插件中,如下所示:

$address = 0;

function my_enqueue() {
    wp_register_script( 'lead-scheduler', null);
    wp_enqueue_script( 'lead-scheduler', plugins_url( '/lead_ajax.js', __FILE__ ), array('jquery') );
    wp_localize_script( 'lead-scheduler', 'leadajax', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );

    wp_enqueue_script( 'jquery' );
    wp_register_script( 'lead_ajax', null);
    wp_enqueue_script( 'lead_ajax' );
 }
add_action( 'init', 'my_enqueue' );

function handle_request(){
    //Check post address, then apply to global variable
    echo $_POST['address'] . "\n";
    global $address;
    $address = $_POST['address'];
    echo $address . "\n";
    wp_die("RIP");
}

add_action( 'wp_ajax_handle_request', 'handle_request' );
add_action( 'wp_ajax_nopriv_handle_request', 'handle_request' ); 

function functionCaller() {
    if (is_page ('')) { 
        ?>
            <script type="text/javascript">
            jQuery(document).ready(function ($) {
                $(function(){

                    var addressField = document.getElementById('input_22_2');
                    var temp;

                    //Set up event listener
                    addressField.onchange = addressCheck;

                    function addressCheck(){
                        //Get foreign script
                        $.getScript("/wp-content/plugins/lead-scheduler/lead_ajax.js", function(){
                            //Wait until done to execute console.log
                            $.when(adrCheck()).done(function(){
                                console.log("Logging: " + "<?php global $address; echo $address ?>");
                            });
                        });
                    }
                });
            });
            </script>
        <?php
    }
}
add_action('wp_head', 'functionCaller'); ?>

AJAX调用来自我调用的JS文件:

//AJAX
function adrCheck(){
    jQuery(document).ready( function() {
        console.log("called")
        var addressField = document.getElementById('input_22_2').value;
      jQuery.ajax({
         type : "post",
         url : leadajax.ajax_url,
         data : {action: "handle_request", address: addressField},
         success: function(response) {
            console.log(response)
         },error: function(response){
            console.log(response);
        }
      })   
    })
}

该呼叫似乎有效,因为handle_request()中的回声可以正常工作。但是在其他任何地方调用该变量都将返回null。 $.when.done似乎并没有做很多事情,也没有同步的事情。

我确定我缺少某种超级基本元素,但似乎找不到。

0 个答案:

没有答案