我使用ajax代码显示了javascript。当我不使用PHP类时(当输入名称为空时),我使用WordPress代码来ajax URL和数据。但是当我使用PHP类时,它会返回如下所示的错误。我想知道如何使用ajax代码从php对象调用JSON数据。
未捕获的TypeError:无法读取未定义的属性'bsnNameEmpty'。
更新仅限ajax代码编辑
jQuery(document).ready(function($) {
$('#contactForm img').hide();
function isEmail(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
$('#contactForm').submit(function(event) {
var bsnname = $('#bsnname').val();
var bsnsubject = $('#bsnsubject').val();
var bsnemail = $('#bsnemail').val();
var bsnmessage = $('#bsnmessage').val();
if ( !bsnname || (bsnname.length < 5) || !bsnsubject || (bsnsubject.length < 1) || !bsnemail || !isEmail(bsnemail) || !bsnmessage || (bsnmessage.length < 5) ) {
$.ajax({
url: ajax_object.ajaxurl,
type: 'POST',
data: {action: 'bsn_ajax'},
dataType: 'json',
cache: false
})
.fail(function(data) {
if(data.bsnErrors.bsnNameEmpty) {
$('#name-field').html('<em class="text-danger">' + data.bsnErrors.bsnNameEmpty + '</em>');
}
if(data.bsnErrors.bsnNameLength) {
$('#name-field').html('<em class="text-danger">' + data.bsnErrors.bsnNameLength + '</em>');
}
if(data.bsnErrors.bsnSubjectEmpty) {
$('#subject-field').html('<em class="text-danger">' + data.bsnErrors.bsnSubjectEmpty + '</em>');
}
if(data.bsnErrors.bsnSubjectLength) {
$('#subject-field').html('<em class="text-danger">' + data.bsnErrors.bsnSubjectLength + '</em>');
}
if(data.bsnErrors.bsnEmailEmpty) {
$('#email-field').html('<em class="text-danger">' + data.bsnErrors.bsnEmailEmpty + '</em>');
}
if(data.bsnErrors.bsnEmailFormat) {
$('#email-field').html('<em class="text-danger">' + data.bsnErrors.bsnEmailFormat + '</em>');
}
if(data.bsnErrors.bsnMessageEmpty) {
$('#message-field').html('<em class="text-danger">' + data.bsnErrors.bsnMessageEmpty + '</em>');
}
if(data.bsnErrors.bsnMessageLength) {
$('#message-field').html('<em class="text-danger">' + data.bsnErrors.bsnMessageLength + '</em>');
}
});
}
if (bsnname && (bsnname.length > 4) && bsnsubject && (bsnsubject.length > 1) && bsnemail && isEmail(bsnemail) && bsnmessage && (bsnmessage.length > 4) ) {
$.ajax({
url: ajax_object.ajaxurl,
type: 'POST',
data: {action: 'bsn_ajax'},
dataType: 'json',
cache: false,
beforeSend: function() {
$('#name-field em').fadeOut(1);
$('#subject-field em').fadeOut(1);
$('#email-field em').fadeOut(1);
$('#message-field em').fadeOut(1);
$('#contactForm img').show();
$('button').text('Sending...');
}
})
.done(function(data) {
$('#success-msg').html('<p class="bg-success">'+ data.bsnMessageSent +'</p>');
})
.always(function(data) {
document.getElementById("contactForm").reset();
$('#contactForm img').hide();
$('#success-msg p').fadeOut(5000);
$('button').text('Send message');
});
}
event.preventDefault();
});
});
我在php对象下面将json数据从它恢复到ajax响应
<?php
class YPE_Bsn_Ajax {
function YPE_bsn_conatctus() {
$bsnContactErrors = array();
$bsnContactSuccess = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if(empty($_POST['bsnname'])) {
$bsnContactErrors['bsnNameEmpty'] = 'Name is required';
}
if(!empty($bsnContactErrors)) {
$bsnContactSuccess['bsnSuccess'] = false;
$bsnContactSuccess['bsnErrors'] = $bsnContactErrors;
} else {
$bsnContactSuccess['bsnSuccess'] = true;
$bsnContactSuccess['bsnmessageSent'] = 'Yor email has been sent';
}
echo json_encode($bsnContactSuccess);
}
}
}
$Bsn_ajax = new YPE_Bsn_Ajax();
?>
答案 0 :(得分:1)
在服务器端为json设置标题,如此
$my_data = $.parseJSON(data);
console.log($my_data.responseText.bsnErrors.bsnNameEmpty);
然后在javascript中阅读
if(empty($_POST['bsnname'])) {
$bsnContactErrors['bsnNameEmpty'] = 'Name is required';
} else {
$bsnContactErrors['bsnNameEmpty'] = 'Name is valid';
}
并在您的服务器端代码中添加其他内容,如果
map
希望它有所帮助!