我有以下文件:
主插件文件:
<?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_enqueue_scripts', 'ffd_load_scripts' );
function ffd_load_scripts()
{
wp_register_script('ffd_js_script', WP_PLUGIN_URL.'/FixFormData/js/ffd_js_script.js', array('jquery'));
wp_localize_script('ffd_js_script', 'myAjax', array(
'ajaxurl' => admin_url('admin-ajax.php')
)
);
wp_enqueue_script('jquery');
wp_enqueue_script('ffd_js_script', plugin_dir_url(__FILE__) . 'js/ffd_js_script.js');
}
getuser.php:
<?php
function getuser($str)
{
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 );
}
}
?>
ffd_js_script.js:
jQuery(document).ready(function($){
jQuery('#input_1_2').change(function()
{
jQuery.ajax({
type : 'post',
dataType : 'json',
url : myAjax.ajaxurl,
data : {action: 'getuser', this.value},
succes: 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]);
}
})
});
});
如何正确实施?我第一次制作一个插件,我已经阅读了很多关于它的内容并看到了很多例子,但我没有正确地实现它。
编辑:
如果我用以下内容替换sql语句:
"SELECT * FROM {$myoptionValue[tablename]} WHERE personeelsNummer = %s", 1
由于以下代码,我在控制台中获得了结果:
echo json_encode( $result2 );
因此,以下代码未正确执行:
succes: 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]);
}
答案 0 :(得分:1)
wp_register_script('ffd_js_script', WP_PLUGIN_URL.'/FixFormData/js/ffd_js_script.js', array('jquery'));
wp_localize_script('ffd_js_script', 'myAjax', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce( 'ajax-nonce' )
)
);
然后,你需要将getuser.php放在插件可以看到的地方,所以一定要包含它或将它放在插件的主文件中
function getuser($str)
{
global $wpdb;
//verify the nonce
if ( ! wp_verify_nonce( $_REQUEST['_nonce'], 'ajax-nonce' ) )
die ( 'Non autorizzato!');
$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 );
}
die();
}
要使ajax中的funciont getuser可以调用,你需要做正确的挂钩:
//ajax hooks
add_action( 'wp_ajax_nopriv_getuser', 'getuser' );
add_action( 'wp_ajax_getuser', 'getuser' );
在js中,你还需要传递nonce:
$.post(myAjax.ajaxurl,
{
action : 'getuser',
_nonce : myAjax.nonce,
value : $(this).value
},
function( response ) { ... });
其余的js似乎很好,请原谅我的一些错别字,我在这里写了它,所以它没有经过测试。