无法从PHP数组中检索数据,这是由使用JQuery Ajax的function()返回的

时间:2018-06-18 08:33:07

标签: javascript php jquery ajax

我有这个“click Listener”,它调用userId参数并将其发送到函数“getModalData”,然后将数组值返回给变量“arrayedUserData”。

$('body').on('click', '.openModal', function () {
        var userId = $(this).val(),
            btnText = $(this).text(),
            btnClass = '',
            colorCode = '',
            arrayedUserData = getModalData(userId);

        if (btnText === "Delete") {
            btnClass = 'danger';
            colorCode = '#d9534f';
        } else {
            btnClass = 'warning';
            colorCode = '#f0ad4e';
        }

        $('#actionBtn').removeClass().addClass('btn btn-' + btnClass).text(btnText);
        $('#modalTitle').text('Confirm ' + btnText);
        $('#S-modalbody p').text('Are you sure you want to ' + btnText + ' user: ');
        $('#S-modalbody h4').css('color', colorCode).text(userId + " - " + arrayedUserData.LastName + ", " + arrayedUserData.FirstName);

    });

这是函数 - “getModalData”。从Ajax的“成功”返回的php数组将被传递给变量 - “UserData”,然后由函数返回。

function getModalData(passedUserId) {
        var UserData;
        $.ajax(
            {
                type: "POST",
                url: "get/get_modal_data.php",
                data: { passedUserId: passedUserId },
                dataType: "json",
                success: function (data) {
                   UserData = data;
                }
            }
        );
        return UserData;
    }

这是“get_modal_data.php”。

<?php
    include "../includes/connect.php";

    if (isset($_POST['passedUserId'])) {
        $UserId = mysqli_real_escape_string($con, $_POST['passedUserId']);

        $getUserData = mysqli_query($con, "SELECT * FROM tblUserAccounts WHERE uaUserId = '".$UserId."'");
        $uaRow = mysqli_fetch_assoc($getUserData);

        $UserDataArr = array("UserId" => $uaRow['uaUserId'],
                     "EmailAddress" => $uaRow['uaEmailAddress'],
                     "FirstName" => $uaRow['uaFirstName'],
                     "LastName" => $uaRow['uaLastName'],
                     "BirthDate" => $uaRow['uaBirthDate'],
                     "Address" => $uaRow['uaAddress'],
                     "Gender" => $uaRow['uaGender'],
                     "ContactNumber" => $uaRow['uaContactNumber'],
                     "BloodTypeId" => $uaRow['uaBloodTypeId'],
                     "AccountStatus" => $uaRow['uaAccountStatus'],
                    );


        echo json_encode($UserDataArr);
        exit();
    }
?>

控制台上出现此错误:

  

未捕获的TypeError:无法读取未定义的get_user_accounts.js的属性“LastName”:66

这是get_user_accounts.js的第66行,它出现在“点击监听器”上。

  

$('#S-modalbody h4')。css('color',colorCode).text(userId +“ - ”+ arrayedUserData.LastName +“,”+ arrayedUserData.FirstName);

但是,我很困惑因为php数组出现在浏览器的网络响应中:

  

成功连接{“UserId”:“1”,“EmailAddress”:“paulanselmendoza @ gmail.com”,“FirstName”:“Paul Ansel”,“LastName”:“Mendoza”,“BirthDate”:“1998- 12-17“,”地址“:”1B阶段8区块20 Olivarez Homes South,Sto.Tomas,Binan City,Laguna“,”Gender“:”Male“,”ContactNumber“:”2147483647“,”BloodTypeId“: “0”,“AccountStatus”:“ACTIVE”}

2 个答案:

答案 0 :(得分:1)

您是否在JSON数据之前看到了Successful Connection?您必须删除它,如果不是,它将是无效的JSON响应。您分享的代码并不具备特定的内容。

我相信你必须检查你的数据库连接,成功连接的位置,它被设置为输出Successful Connection,这会破坏你的响应。请删除那段代码。

include "../includes/connect.php";

可能是这样的:

$conn = mysqli_connect() or die("Error");
echo "Successful Connection";

答案 1 :(得分:0)

因为getModalData功能在ajax(UserData)之前返回UserData = data;。使用回调函数:

使用回调

function getModalData(passedUserId,callback) {
        $.ajax(
            {
                type: "POST",
                url: "get/get_modal_data.php",
                data: { passedUserId: passedUserId },
                dataType: "json",
                success: function (data) {
                   callback(data);
                }
            }
        );
    }


$('body').on('click', '.openModal', function () {
    var userId = $(this).val(),
        btnText = $(this).text(),
        btnClass = '',
        colorCode = '';

    getModalData(userId, function (arrayedUserData) {

        if (btnText === "Delete") {
            btnClass = 'danger';
            colorCode = '#d9534f';
        } else {
            btnClass = 'warning';
            colorCode = '#f0ad4e';
        }

        $('#actionBtn').removeClass().addClass('btn btn-' + btnClass).text(btnText);
        $('#modalTitle').text('Confirm ' + btnText);
        $('#S-modalbody p').text('Are you sure you want to ' + btnText + ' user: ');
        $('#S-modalbody h4').css('color', colorCode).text(userId + " - " + arrayedUserData.LastName + ", " + arrayedUserData.FirstName);
    });
});