【问题标题】:Cannot retrieve data from PHP array, which is returned by a function() that uses JQuery Ajax无法从使用 JQuery Ajax 的函数()返回的 PHP 数组中检索数据
【发布时间】:2018-06-18 08:33:07
【问题描述】:

我有这个“点击监听器”,它调用并将一个 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();
    }
?>

控制台上出现此错误:

未捕获的类型错误:无法读取未定义 get_user_accounts.js: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","Address":"Phase 1B Block 8 Lot 20 Olivarez Homes South, Sto. Tomas, Binan City, Laguna","Gender":"Male","ContactNumber":"2147483647","BloodTypeId": "0","AccountStatus":"ACTIVE"}

【问题讨论】:

标签: javascript php jquery ajax


【解决方案1】:

您是否看到在 JSON 数据之前得到:Successful Connection?您必须删除它,否则它将是无效的 JSON 响应。您共享的代码没有特定内容。

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

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

可能是这样的:

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

【讨论】:

  • 感谢您注意到 Praveen 先生,一直以来我都认为浏览器会显示 Ajax 连接成功。
  • @PaulAnselMendoza 那么这不是问题所在吗?问题出在其他地方吗?
  • Praveen 先生您也说得对,回显的“成功连接”使 JSON 响应无效,同时我没有为我的函数使用回调方法,导致它返回之前的值它是由 AJAX 分配的。
  • @PaulAnselMendoza 谢谢! :)
【解决方案2】:

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

使用回调

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);
    });
});

【讨论】:

  • @PaulAnselMendoza 欢迎您,并查看 Promise,这是执行此操作的新方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2012-02-21
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多