javascript - JQuery AJAX 无法解析 PHP PDO 方法的响应

标签 javascript php jquery ajax

我正在尝试使用 JQuery AJAX 和 PHP 填充下拉列表。我在 PHP 中创建了一个方法,它 echo 是一个 json_encoded() array。但是,当加载文档时,由于一些 JSON 解析错误,它无法获取结果。

我在 PHP 中使用了一个可调用的存储过程,并在 MySQL Workbench 中测试该存储过程时验证了它返回了正确的结果集。

这可能是什么原因造成的?

错误:

Parsing JSON Request Failed

RoleDaoImpl.php

function getAllRoles()
{
    $roleList[] = "";
    try {
        $SQL = "CALL getAllRoles()";
        $sp_getAllRoles = $this->connection->prepare($SQL);
        $sp_getAllRoles->execute();

        $resultSet = $sp_getAllRoles->fetchAll(PDO::FETCH_ASSOC);
        foreach ($resultSet as $row) {
            $roleId = $row['role_id'];
            $roleName = $row['role_name'];

            $roleList[] = array("roleId" => $roleId, "roleName" => $roleName);
        }
        echo json_encode($roleList);
    } catch (PDOException $e) {
        die($e->getMessage());
    }
}

get_all_roles.php

require_once '../../core/init.php';
$roleDaoImpl = new RoleDaoImpl($pdo);

$roleDaoImpl->getAllRoles();

JS文件

$(document).ready(function(){
    loadRolesToDropDown();
});

function loadRolesToDropDown(){
    var url = 'get_all_roles.php';
    $.ajax({
        url: url,
        type: 'post',
        dataType: 'json',
        success: function(response){
            var len = response.length;
            alert(response);
            $("#roledropdown").empty();
            for(var i = 0; i < len; i++){
                var roleId = response[i]['roleId'];
                var roleName = response[i]['roleName'];
                $("#roledropdown").append("<option value='"+roleId+"'>"+roleName+"</option>");
            }
        },
        error : function(x,e){
            if (x.status==0) {
                alert('You are offline!!\n Please Check Your Network.');
            } else if(x.status==404) {
                alert('Requested URL not found.');
            } else if(x.status==500) {
                alert('Internal Server Error.');
            } else if(e=='parsererror') {
                alert('Error.\nParsing JSON Request failed.');
            } else if(e=='timeout'){
                alert('Request Time out.');
            } else {
                alert('Unknown Error.\n'+x.responseText);
            }
        }
    });
}

我想不出其他方法来确定原因。我对将 AJAX 与 PHP 结合使用还很陌生。我使用 AJAX 来避免刷新页面。最近,我尝试遵循一些教程,并仍在尝试掌握 JQuery Ajax 和 PHP 如何协同工作。

我还可以进行哪些其他故障排除?

如果有任何建议,我将不胜感激。

谢谢。

***** 编辑 *****

我尝试使用 console.log() 打印日志,如下所示:

success: function(response){
    var len = response.length;
    alert(response);
    console.log(response);
    $("#roledropdown").empty();
    for(var i = 0; i < len; i++){
        var roleId = response[i]['roleId'];
        var roleName = response[i]['roleName'];
        $("#roledropdown").append("<option value='"+roleId+"'>"+roleName+"</option>");
    }
}

我在 Google Chrome 的控制台窗口上看到了 ff。

jquery-3.3.1.js:9488 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

enter image description here

然后,我检查了这一行ajax @jquery-3.3.1.js:9206。我得到了 ff。 (我不知道这是否与解析有关)

try {
    completed = false;
    transport.send( requestHeaders, done );
    } catch ( e ) {
    // Rethrow post-completion exceptions
    if ( completed ) {
        throw e;
    }

    // Propagate others as results
    done( -1, e );
}

顺便说一句,下拉列表包含在模态 div 中。我不确定它是否与该错误有任何关系。根据控制台窗口中显示的消息,某些内容似乎已被弃用。

***** 编辑结束 *****

最佳答案

如果您怀疑 json_encode() 有问题,则必须检查该函数是否返回 false,然后使用 json_last_error() 了解原因。

关于javascript - JQuery AJAX 无法解析 PHP PDO 方法的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50311174/

相关文章:

javascript - 通过 JavaScript 在 header 或 HTML 中动态包含脚本元素

php - 为 foreach() 提供的无效参数哪里出错了?

jquery - 是否可以控制 jQuery UI Sortable 助手的溢出?

javascript - 如何更改 Disqus 评论字段中的默认占位符文本?

javascript - 使用 Ajax 从 jQuery 调用 PHP 脚本来创建新文件夹

javascript - jquery 方法链中的点与括号表示法

javascript - 将 DIV 动画设置为全高并切换回定义的高度

javascript - AngularJS 处理格式化数字输入

javascript - 使用 ie11 更改 javascript 中的函数时遇到问题

php - 从脚本语言中调用 shell 命令会降低性能吗?