我有一个WordPress前端表单,它使用AJAX保存数据。表单是在后端处理的,显然是使用PHP post,我做了一个简单的解决方案,如果表单无法提交,就向用户通知表单提交错误。
但我的表单是针对已登录用户的,如果WordPress用户已注销,我希望我的表单显示错误消息。
<form action="https://milyin.com/my/" method="post" name="milyin-add-edit" id="Add-Edit" enctype="multipart/form-data">
<input type="hidden" name="action" value="wpfrtp_save_post">
这是表单的开始,我相信表单HTML的其余部分确实与这个问题无关,所以我不会包括这些内容,如果仍然需要,请在注释中通知我,这也不会是问题。
下面是用于通过AJAX提交表单的JS,然后还用于显示一些错误。
jQuery(\'#Add-Edit\').on(\'submit\', function(e) {
e.preventDefault();
jQuery(\'.action-save\').prop(\'disabled\', true);
jQuery.ajax({
url : jQuery(this).attr(\'action\') || window.location.pathname,
type: "POST",
data: jQuery(this).serialize(),
error: function(jqXHR) {
jQuery(".action-save").html("Error");
jQuery(".action-save").css("background-color", "red");
jQuery("#user_post_publish").html("Error");
jQuery(" #user_post_publish").css("background-color", "red");
msg = \'\';
if (jqXHR.status === 0) {
msg = \'No Internet Connection Available. Turns out your Internet has gone to a random hibernation\';
} else if (jqXHR.status == 404) {
msg = \'Requested page not found. [404]\';
} else if (jqXHR.status == 500) {
msg = \'Internal Server Error [500]. Hold Tight, Our Server turned Evil, we will solve it soon. Please try again after some time.\';
} else if (exception === \'parsererror\') {
msg = \'Requested JSON parse failed.\';
} else if (exception === \'timeout\') {
msg = \'Time out error. It took too long to transfer the data, please save again.\';
} else if (exception === \'abort\') {
msg = \'Ajax request aborted.\';
} else {
msg = \'Uncaught Error.\\n\' + jqXHR.responseText;
}
jQuery(\'.Error\').html(msg);
jQuery(\'.Error\').show();
}
});
});
正如您在我的代码中看到的,如果发生任何形式的表单提交错误,我们会将按钮变为红色,并将其文本更改为;“错误”;然后检查错误代码,并根据错误代码显示消息。
现在,如果用户注销并尝试提交表单,它将不会显示“一个”;“错误”;由于表单提交成功,AJAX寻求success
功能而不是error
作用
我想做的是:
因此,首先,我想确保如果用户注销,AJAX知道表单提交中有错误,并且success()
不应该运行,我没有包括success()代码,因为它很长而且似乎不相关。
其次,我想告诉error函数,错误是由于用户注销引起的,这样我就可以通过jQuery(\'.Error\').html(msg);
if(isset($_POST[\'action\'])&& $_POST[\'action\']=="wpfrtp_save_post"){
if ( !wp_verify_nonce( $_POST[\'frontier_add_edit_post_\'.$_POST[\'postid\']], \'frontier_add_edit_post\' ) ){
[...]
global $current_user;
if(!is_user_logged_in()){
//This is the problem region
// I don\'t understand What Should come here
}