我有一个主插件文件,需要getuser.php(也是插件文件)。 在getuser.php中,我编写了一个函数getuser()
现在在主插件文件中我尝试使用以下代码调用此函数:
主插件文件:
<?php
/*
Plugin Name: FixFormData
Description: If you want to autocomplete a form with existing data, this plugin is for you.
Version: 1.1
Author: Stijn Aerts
Author URI: http://stijnaerts.be
License: GPL2
*/
require( plugin_dir_path( __FILE__ ) . 'menu.php');
//require_once( plugin_dir_path( __FILE__ ) . 'getuser.php');
add_action( 'wp_footer', 'ajax_lookup_userdata' );
function ajax_lookup_userdata(){
if (!is_admin()) {
wp_enqueue_script('jquery');
}
?>
<script type="text/javascript">
jQuery(document).ready(function($){
jQuery('#input_1_2').change(function(){showUserName(this.value);});
function showUserName(str){
if(str==''){jQuery('#input_1_3').val('');}
jQuery.get("<?php echo plugins_url() . '/FixFormData/getuser.php'; ?>", { q: str }, function(response){
var parsed = JSON.parse(response);
var arr = [];
for(var x in parsed){ arr.push(parsed[x]);}
jQuery('#input_1_3').val(arr[1]);
jQuery('#input_1_4').val(arr[2]);
});
}
});
</script>
<?php
}
?>
getuser.php:
<?php
if (isset($_POST['q']) && !empty($_POST['q'])) {
getuser($_POST['q']);
exit;
}
function getuser($str)
{
//$q = intval($_GET['q']);
//include "../../../wp-load.php";
global $wpdb;
$myoption = get_option( 'fixformdata_options' );
$myoptionValue = maybe_unserialize( $myoption );
$result2 = $wpdb->get_row
(
$wpdb->prepare
(
"SELECT * FROM {$myoptionValue[tablename]} WHERE personeelsNummer = %d", $str
)
);
if($result2)
{
echo json_encode( $result2 );
}
}
?>
这仍然无效。
答案 0 :(得分:2)
您需要将数据发送到您的功能所在的网址
$(function() {
function showUserName(str) {
if (str === '') {
$('#input_1_3').val('');
}
$.ajax({
type: 'post',
url: 'getuser.php', //where your function is located
data: { whatever: value }, //post data $_POST['whatever'] = value
success: function(data) {
var data = JSON.parse(data); //whatever the server echoes will end up in data
$('#input_1_3').val(data[0]);
$('#input_1_4').val(data[1]);
}
});
}
$('#input_1_2').change(function() {
showUserName($(this).val());
});
});
您还应该确保您的PHP代码已准备好响应该请求。
<?php
if (isset($_POST['whatever']) && !empty($_POST['whatever'])) {
getuser($_POST['whatever']);
exit;
}
function getuser($str) {
// logic and stuff
echo json_encode(["whatever", "you want to return"]);
}
?>
答案 1 :(得分:2)
我认为wp_localize_script就是你要找的东西。 http://codex.wordpress.org/Function_Reference/wp_localize_script
你可以通过将json数据传递给javascript文件来保持javascript和php的分离,而wordpress将以干净优雅的方式完成这项工作。
但是如果你需要做的事情需要用ajax请求而不是页面加载,那么你必须在这里使用wp_ajax_ hook这个好的教程: http://www.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/
答案 2 :(得分:1)
听起来你的getuser()
函数是用PHP编码的,对吗?假设如此,您将无法通过jQuery调用它。 PHP是一种服务器端语言。一旦它运行,就是这样,它不能在不重新加载页面的情况下再次访问,并且仍然只能由服务器端语言访问。 jQuery是客户端脚本,在用户计算机上完成。
基本上,您需要getuser()
函数以某种形式的JavaScript,或者输出您想要显示的内容并让jQuery显示页面。