我正在尝试在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
似乎并没有做很多事情,也没有同步的事情。
我确定我缺少某种超级基本元素,但似乎找不到。