从PHP对象获取ajax中的json数据

时间:2016-05-09 16:48:56

标签: php ajax

我使用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();
?>

1 个答案:

答案 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

希望它有所帮助!