回答了一些问题后,我编辑了代码。这是我的插件结构
stpl1
stpl1.php
getuser.php
在stpl1中。php我有以下代码:
<?php
/*
Plugin Name: Wordpress Plugin Stijn 1
Description: Een Wordpress plugin die data uit een database haalt en invult via Ajax
in een form.
Version: 1.1
Author: Stijn Aerts
Author URI: http://stijnaerts.be
License: GPL2
*/
add_action( \'wp_head\', \'ajax_lookup_userdata\' );
function ajax_lookup_userdata(){
if (!is_admin()) {
wp_enqueue_script(\'jquery\');
}
$url = plugins_url(\'getuser.php\', __FILE__);
?>
<script type="text/javascript">
jQuery(document).ready(function($){
alert(\'test\');
jQuery(\'#input_1_2\').change(function(){
showUser(this.value);
});
function showUser(str){
if(str==\'\'){
jQuery(\'form\').html(\'\');
}
jQuery.get(<?php echo $url; ?>, { q: str }, function(response){
jQuery(\'#input_1_3\').val(\'test\');
});
}
});
</script>
<?php
}
?>
和在getuser中。php我有以下代码:
<?php
$q = intval($_GET[\'q\']);
$con = mysqli_connect(\'localhost\',****,****,****);
if (!$con) {
die(\'Could not connect: \' . mysqli_error($con));
}
mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM Personeel WHERE personeelsNummer = \'".$q."\'";
$result = mysqli_query($con,$sql);
echo "test";
mysqli_close($con);
?>
我激活了插件并转到以下页面:
test website我在第一个文本输入中输入一个数字,在第二个文本输入中应该输入“test”。但什么都没发生。。。似乎是此代码导致了故障:
jQuery.get(<?php echo $url; ?>, { q: str }, function(response){
jQuery(\'#input_1_3\').val(\'test\');
});
我做错了什么?
谢谢你的帮助,我已经得到了,这是非常有帮助和学习完整。
最合适的回答,由SO网友:tormorten 整理而成
好吧,如果这是你的整个插件,那么由于很多原因,这是行不通的。
我猜你在这里犯了一个致命的错误。这是因为您在PHP文档中使用的是HTML(以及javascript)。
此外,如果getuser。php不位于站点的根目录下,JavaScript无法找到它。
我还将使用jQuery方法,因为您已经在使用它了。
尝试以下操作:
<?php
/*
Plugin Name: Wordpress Plugin Stijn 1
Description: Een Wordpress plugin die data uit een database haalt en invult via Ajax in een form.
Version: 1.0
Author: Stijn Aerts
Author URI: Stijn Aerts
License: GPL2
*/
add_action( \'wp_footer\', \'ajax_lookup_userdata\' );
function ajax_lookup_userdata() {
$url = plugins_url( \'getuser.php\', __FILE__ ); // get the url to the getuser.php-script
?>
<script type="text/javascript">
jQuery( document ).ready(function($) { // jQuery runs in noConflict mode, use this while developing for WordPress
$(\'#input_1_2\').change(function() {
showUser(this.value)
});
function showUser(str) {
if(str == \'\') {
$(\'form\').html(\'\');
}
$.get(<?php echo $url; ?>, { q: str }, function(response) {
$(\'form\').html(response);
});
}
});
</script>
<?php
}
?>
此外,我希望使用
WordPress\' native ajax functions for plugins.
SO网友:MEDZ
首先,WordPress中的ajax代码不同于普通的ajax。其次,您不需要将Javascript添加到函数中,但是,创建JS文件并将其排队是更好的做法。以下是操作方法:
JS文件:
jQuery(document).ready(function($){
$(\'#input_1_2\').change(function(){
jQuery.ajax({
type:"POST", //request type
url: ajaxurl, //fixed ajax file url
//action is the php function to call, after that you can send any data
//to this function like postID.
data: {\'action\':\'getusers\',\'q\': \'value\'}, //function name to implement and data to send
//where to put the result.
success:function(data){
$("<form>").html(data);
console.log(data);
},
error:function(errorThrown){
console.log(errorThrown);
}
});
});
});
php文件:
function my_scripts(){
wp_localize_script( \'ajax-script\', \'ajax_object\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
wp_register_script( \'Jsfile\', get_template_directory_uri().\'/js/my_ajax_file.js\', array( \'jquery\' ) );
wp_enqueue_script( \'Jsfile\' );
}
add_action( \'wp_enqueue_scripts\', \'my_scripts\' );
function getusers(){
$q = $_REQUEST[\'q\'];
//do your processing staff
return #data;
}