簡體   English   中英

從PHP對象獲取ajax中的json數據

[英]Get json data in ajax from PHP object

我有使用 ajax 代碼顯示的 javascript。 當我不使用 PHP 類時(當輸入名稱為空時),我使用 WordPress 代碼來 ajax URL 和數據它工作的所有內容。 但是當我使用 PHP 類時,它會返回如下所示的錯誤。 我想知道如何使用 ajax 代碼從 php 對象調用 JSON 數據。

未捕獲的類型錯誤:無法讀取未定義的屬性“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();
?>

像這樣在服務器端為 json 設置標頭

header('Content-Type: application/json');
echo json_encode($bsnContactSuccess); 

然后在javascript中閱讀

$my_data = $.parseJSON(data);
console.log($my_data.responseText.bsnErrors.bsnNameEmpty);

並在您的服務器端代碼中在此下面添加 else if

if(empty($_POST['bsnname'])) {
    $bsnContactErrors['bsnNameEmpty'] = 'Name is required';
} else {
     $bsnContactErrors['bsnNameEmpty'] = 'Name is valid';
}

希望能幫助到你 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM