在StackOverflow上问了这个问题,他们把我带到那边。。。你在这里住的好地方=)
我一直在开发一个非常简单的WordPress插件,并希望对页面上的某些字段进行实时验证,这正是我遇到的问题。我一直在到处寻找一些有用的东西,但我就是不能让它发挥作用。
我一直在努力让ajax正常工作,我知道我遗漏了一些明显的东西,我就是想不出来。
主要功能文件包括注册我的js文件。
function on_screen_validation() {
wp_enqueue_script( "field_validation", path_join(WP_PLUGIN_URL, basename( dirname( __FILE__ ) )."/field-validation.js"), array( \'jquery\' ) );
}
add_action( \'admin_print_scripts\', \'on_screen_validation\' );
js运行此代码来捕获onblur命令并将值传递给php验证文件。
jQuery(document).ready(function() {
//run field validation on username on blur
jQuery(\'.valusername\').blur(function() {
var usernameID = jQuery(this).attr(\'id\');
var usernameVal = jQuery(\'#\'+usernameID).val();
var thisFunction = \'validateUserName\';
jQuery.post("mywebaddress...validation.php",{Function: thisFunction, thevars: usernameVal}, function(data) {
alert(data); //would update validation message here
});
});
});
以及验证。php脚本如下所示:
if(isset($_POST[\'Function\'])){
call_user_func($_POST[\'Function\'], $_POST[\'thevars\']);
}
function validateUserName($username){
if ( username_exists($username) ) {
echo $username.\' does exist\';
} else {
echo $username.\' doesnt exist\';
}
}
显然,我现在只是使用警报来确保数据被正确检查。
如果我取出WordPress username\\u exists函数,只回显一个字符串,它就可以正常工作。但如果username\\u存在,则会创建一个500内部服务器错误。我需要知道如何获得外部验证。php文件来识别WordPress函数(我想),到目前为止我还没有发现任何有用的东西。
感谢阅读。。。对不起,我解释得太长了,我只是想确保上下文都在那里,这样才有意义(我希望!)!
干杯Matt
最合适的回答,由SO网友:Hameedullah Khan 整理而成
PLEASE!! PLEASE!! 不要从javascript发送php函数名。下面是正确的做法。这可能不是最好的方式,但至少是安全的方式。
注册javascript(请参阅plugins_url 而不是path\\u join),验证现在也是插件的一部分,它不必进行单独的验证。php:
function on_screen_validation() {
wp_enqueue_script( "field_validation", plugins_url( "field-validation.js", __FILE__ ), array( \'jquery\' ) );
wp_localize_script( "field_validation", "MySecureAjax", array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
}
add_action( \'admin_print_scripts\', \'on_screen_validation\' );
add_action( \'wp_ajax_UserNameValidation\', \'validateUserName\' );
function validateUserName() {
$username = $_POST[\'thevars\'];
if ( username_exists($username) ) {
echo $username.\' does exist\';
} else {
echo $username.\' doesnt exist\';
}
// Don\'t remove exit
exit;
}
您的javascript部分:
jQuery(document).ready(function() {
//run field validation on username on blur
jQuery(\'.valusername\').blur(function() {
var usernameVal = jQuery(this).val();
var action = \'UserNameValidation\';
jQuery.post( MySecureAjax.ajaxurl, {action: action, thevars: usernameVal}, function(data) {
alert(data); //would update validation message here
});
});
});
您可以添加nonce检查以获得进一步的安全性和验证。