【问题标题】:PHP parsererror ajax get returns array of stringsPHP parsererror ajax get 返回字符串数组
【发布时间】:2017-01-11 20:48:05
【问题描述】:

我在尝试绕过从我的 ajax 请求返回的“解析器错误”时遇到问题,尽管 devtools 中的响应是字符串数组。我有一个单击事件,它发出 ajax 请求以从数据库中提取信息。开发工具中的结果是:

1["1","admin","admin@admin.com","test","2017-01-11 00:00:00"]

我期待它是一个 json 对象 { }。

我为点击事件写的代码是:

$('#viewProfile').on('click', function() {
    $.ajax({
        type: 'GET',
        url: 'api.php',
        data: "",
        cache: false,
        dataType: 'json',
        success: function(data) {
            var id = data[0];
            var name = data[1];
            $('#userDetails').html("<p>ID: " + id + " Name: " + name + "</p>");
        },
        error: function(request, error) {
            $('#userDetails').html("<p>There was a problem: " + error + "</p>");
        }


    });


});

我为api.php写的php

    session_start();
echo $_SESSION['user_session'];

//DECLARE VARS FOR DB
$db_host = "localhost";
$db_name = "dbregistration";
$db_user = "root";
$db_pass = "";
$db_tablename = "tbl_users";

//CONNECT TO DB
include 'dbconfig.php';
$db_con = mysqli_connect($db_host,$db_user,$db_pass,$db_name);
$dbs = mysqli_select_db($db_con, $db_name);

//QUERY DB FOR DATA
$result = mysqli_query($db_con, "SELECT * FROM $db_tablename where user_id = '".$_SESSION['user_session']."' ");
$array = mysqli_fetch_row($result);

//RETURN RESULT
echo json_encode($array);

我尝试在 api.php 中使用 json_encode($array, JSON_FORCE_OBJECT) 并将数据类型更改为 HTML,这显然不起作用。简而言之,我的目标是能够触发 click 事件,发送一个 ajax 请求以根据用户 ID 从数据库中检索信息,然后将其返回到页面上的 #userDetails id。我被困在试图绕过对我来说似乎是障碍的字符串数组。

【问题讨论】:

  • 你需要删除这行echo $_SESSION['user_session'];
  • 这不是一个字符串数组,它是一个json字符串,前面有字符串1,因此它是一个无效的json字符串。
  • 旁注:$dbs = mysqli_select_db($db_con, $db_name); 你不需要那个。您已经在 mysqli_connect($db_host,$db_user,$db_pass,$db_name) 中声明了所有 4 个参数。
  • mysqli_error($db_con) 也添加到查询中,这会给您带来什么?以及查看您的控制台和错误报告。

标签: php jquery arrays ajax


【解决方案1】:

删除这一行:

echo $_SESSION['user_session'];

并改变这个:

$array = mysqli_fetch_row($result);

到这里:

$array = mysqli_fetch_assoc($result);

编辑:您还应该检查各种与数据库相关的语句的成功/失败:

$db_con = mysqli_connect($db_host,$db_user,$db_pass,$db_name) or die("there was a problem connecting to the db");
$dbs = mysqli_select_db($db_con, $db_name) or die("Could not select db");

还有

$result = mysqli_query($db_con, "SELECT * FROM $db_tablename where user_id = '".$_SESSION['user_session']."' ");
if (!$result) {
    die("query failed");
}

【讨论】:

  • 我的答案被否决的任何特殊原因?尝试有用的答案却会因此受到惩罚,这有点糟糕。
  • 同意。我很肯定答案也解决了这个问题。
  • 谢谢。 @LarsStegelitz 我同意反对票应该解释自己在问题或答案上的任何合理努力。
【解决方案2】:

这需要删除echo $_SESSION['user_session'] 它被返回到 ajax 调用,因为它在 json 上,所以返回不正确。

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多