我不明白为什么在尝试将php错误从注册表单传递到ajax脚本时总是得到一个空的或未定义的响应。我工作在一个自定义插件添加登录,注册和仪表板与文件夹。
历史记录:我创建一个ajax注册表单,为我想要创建的每个字段创建一个错误(如果有错误),并在字段下面显示它。
我尝试使用basic ($_POST
)、json_encode
和wp_send_json_error
。每次我在console.log
中得到一个空的或未定义的响应。
我知道我的ajax脚本可以工作,因为数据$_POST很好地传递。但我不能解决我的问题或者我不知道我怎么处理Json!
我读过ajax,并且跟踪了很多关于相同问题的文档,但没有结果。
目前基本的东西不起作用,你能帮我一下吗?
我使用相同的js/ajax文件进行登录、注册和仪表板。会有冲突吗?
现在我只想测试用户名
phpforajax.php
:
wp_localize_script('ajax', 'wpAjax', array('ajaxUrl' => admin_url('admin-ajax.php')));
wp_enqueue_script('data-login', plugins_url('', LQUSER) . '/data/ajaxdata.js', array('jquery'), '1.0', true);
add_action('wp_ajax_add_new_user','add_new_user');
add_action('wp_ajax_nopriv_add_new_user','add_new_user');
function add_new_user(){
if (isset($_POST['registr_submit']) && wp_verify_nonce($_POST['csrf'], 'csrf')) {
// User data registration
$username = $_POST['username'];
/*
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$newpassword = $_POST['newpassword'];
$confirmpassword= $_POST['confirmpassword'];
$roleuser = 'subscriber';
verify only username
*/
if(empty($username)){
$data = [];
$data['success'] = false;
$data['message'] = 'Username is required';
echo json_encode($return);
}
// before to use wp_send_json_error I must find my mistake or my forgetting
//if i use wp_die(); the form isn't pass to ajax
}
my_registration_form.php
ajaxdata.js
:
$(function(){
$('#registr_submit').on('click', function(e){
e.preventDefault();
$.ajax({
url : wpAjax.ajaxUrl,
data : {action:'add_new_user'},
type : 'POST',
dataType: 'json',
success : function(response){
var data = $.parseJSON(response);
// below work and display input
console.log(username);
// below doesn't work
if(data.success == false){
console.log(response.message); //must display : Username is required.
}
}
});
});
发布于 2021-02-26 06:35:43
非常感谢汤姆和莎莉。我的问题确实是不能将registr_submit发送到。实际上,我不太了解ajax,现在它很好。我认为序列化输入字符串表单已经足够获得提交值了。主要是我确信php发送到jquery/ajax,而它显然正好相反。因此,为了:
ajaxdata.js:
$(function(){
$('#registr_submit').on('click', function(e){
e.preventDefault();
var userdata = $('#my_registration_form').serialize();
userdata += '&action=add_new_user®submit=registr_submit';
var username = $('#username').val();
$.ajax({
url : wpAjax.ajaxUrl,
data : userdata,
type : 'POST',
dataType: 'json',
success : function(response){
if(username == ''){
if(response.success == false) {
$('#error-emp-name').html(response.data);
}
}
else{
if(response.success == true) {
$('#error-emp-name').html('Correcte');
}
}
}
}
});
});
phpforajax.php:
wp_localize_script('ajax', 'wpAjax', array('ajaxUrl' => admin_url('admin-ajax.php')));
wp_enqueue_script('data-login', plugins_url('', LQUSER) . '/data/ajaxdata.js', array('jquery'), '1.0', true);
add_action('wp_ajax_add_new_user','add_new_user');
add_action('wp_ajax_nopriv_add_new_user','add_new_user');
function add_new_user(){
function add_new_user(){
global $wpdb;
if (isset($_POST['regsubmit']) && wp_verify_nonce($_POST['csrf'], 'csrf')) {
$username = $_POST['username'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$newpassword = $_POST['newpassword'];
$confirmpassword= $_POST['confirmpassword'];
$roleuser = 'subscriber';
if (empty($username)) {
wp_send_json_error('Username is required');
}else{
wp_send_json_success('Ok');
}
}
https://wordpress.stackexchange.com/questions/384086
复制相似问题