伙计们。我曾尝试用ajax构建wordpress简单的注册表单,但根本不起作用。这是我的代码,一个php和jQuery ajax。请告诉我我的代码有什么问题。
仅供参考,(1)“警报”不起作用,(2)数据没有输入到我的自定义表中,(3)我在“我的测试注册表”中添加了“e.preventDefault()”和“return false”。但当我重新加载浏览器时,它并没有避免重新加载表单。
// The .php function code
if (!defined(\'ABSPATH\')) { exit; }
add_action( \'wp_enqueue_scripts\', \'load_scripts\' );
// Load scripts
function load_scripts()
{
// I called jquery.min.js and jquery validation from function.php, not from here
wp_enqueue_script(\'test-reg\', get_template_directory_uri() . \'/js/my-test-reg.js\', array(\'jquery\'), \'1.0\', true );
wp_localize_script( \'test-reg\', \'myAjax\', array(
\'myUrl\' => admin_url(\'admin-ajax.php\')
)
);
add_action( \'wp_ajax_nopriv_add_to_register\', \'to_register\' );
}
function to_register()
{
$nonce = $_REQUEST[\'nonce\'];
if ( empty( $_POST) || !wp_verify_nonce( $nonce, \'my-nonce\') )
{
die(\'Oopss...\');
} else {
global $wpdb;
$firstName = sanitize_text_field( $_POST[\'firstName)\'] );
$lastName = sanitize_text_field( $_POST[\'lastName)\'] );
$email = sanitize_email( $_POST[\'email\'] );
$custom_table = $wpdb->prefix . "my_custom_table";
$the_email = $wpdb->get_row( "SELECT `email` FROM $table_name" );
if ( $the_email == $email )
{
$res[\'type\'] = \'error\';
$res[\'show\'] = \'<span> The e-mail you entered already exists</span>\';
$res = json_encode($res);
echo $res;
die();
} else {
$entered = $wpdb->insert ($custom_table,
array(
\'firstName\' => $firstName,
\'lastName\' => $lastName,
\'email\' => $email
),
array(
\'%s\',
\'%s\',
\'%s\'
)
);
}
if ( $entered )
{
$res[\'type\'] = \'success\';
$res[\'show\'] = \'<span> Hello, you\\\'re success! </span>\';
$res = json_encode($res);
echo $res;
die();
}
}
}
function reg_form()
{
$nonce = wp_create_nonce(\'nonce\');
$out = \'<form id="test-register" method="post">\';
$out = \'<div id="response"></div>\';
$out = \'<input type="text" name="firstName" id="your-firstName" required>\';
$out .= \'<input type="text" name="lastName" id="your-lastName" required>\';
$out .= \'<input type="text" name="email" id="your-email" required>\';
$out .= \'<input type="submit" id="submit-btn" value="Go">
<input type="hidden" id="my-nonce" value="\'.$nonce.\'">\';
$out = \'</form>\';
return $out;
}
// Here is my code of \'my-test-reg.js\'
jQuery(document).ready(function($) {
var formIsValid = $(\'#test-register\');
formIsValid.validate();
$(\'#test-register\').submit(function(e) {
e.preventDefault();
// Get the data
var mydata = {
action: \'add_to_register\',
firstName: $(this).find(\'#your-firstName\').val();
lastName: $(this).find(\'#your-lastName\').val();
email: $(this).find(\'#your-email\').val();
};
// Call the ajax
$.ajax({
type: \'post\',
dataType: \'json\',
url: myAjax.myUrl,
data: mydata,
success: function ( response )
{
if ( response.type == \'success\' )
{
alert( \'Congrat, you are success!\' ); // Doesn\'t work
$( \'#response\' ).html(); // Doesn\'t work
} else {
alert( \'Not Success!\' ); // Doesn\'t work
$( \'#response\' ).html(); // Doesn\'t work
}
}
});
return false;
});
});
希望有人能帮助我。
顺致敬意,
SO网友:Domain
移动此操作“add\\u action”(“wp\\u ajax\\u nopriv\\u add\\u to\\u register”,“to\\u register”);”来自load\\u scripts function()。
// Load scripts
function load_scripts()
{
// I called jquery.min.js and jquery validation from function.php, not from here
wp_enqueue_script(\'test-reg\', get_template_directory_uri() . \'/js/my-test-reg.js\', array(\'jquery\'), \'1.0\', true );
wp_localize_script( \'test-reg\', \'myAjax\', array(
\'myUrl\' => admin_url(\'admin-ajax.php\')
)
);
}
add_action( \'wp_ajax_nopriv_add_to_register\', \'to_register\' );
将reg\\u form()函数替换为以下内容:-
function reg_form()
{
$nonce = wp_create_nonce(\'nonce\');
$out = \'<form id="test-register" method="post">\';
$out .= \'<div id="response"></div>\';
$out .= \'<input type="text" name="firstName" id="your-firstName" required>\';
$out .= \'<input type="text" name="lastName" id="your-lastName" required>\';
$out .= \'<input type="text" name="email" id="your-email" required>\';
$out .= \'<input type="submit" id="submit-btn" value="Go">
<input type="hidden" id="my-nonce" value="\'.$nonce.\'">\';
$out .= \'</form>\';
return $out;
}
您尚未连接$out变量。