【问题标题】:cannot receive json in js ajax request from php file无法在来自 php 文件的 js ajax 请求中接收 json
【发布时间】:2018-06-07 08:58:37
【问题描述】:

点击一个按钮,js 开始向 php 文件发出 ajax 请求。然后,php 文件使用 php-loop 获取数据库的一个表的所有条目。将它们添加到数组中,然后 php 文件将其解析为 JSON 并将其回显给 ajax 请求。成功后,ajax 请求应输出警报,但我既没有收到错误消息,也没有收到警报。

根据cmets添加一些改动后。它现在随机显示错误消息 2 条错误消息:

Fehler: {"readyState":0,"responseText":"","status":0,"statusText":"error"}


Fehler: {"readyState":4,"responseText":"<br />\n<b>Fatal error</b>:  Uncaught Error: Cannot use object of type mysqli_result as array in C:\\xampp\\htdocs\\integration\\get.php:32\nStack trace:\n#0 C:\\xampp\\htdocs\\integration\\get.php(13): getLevel1()\n#1 {main}\n  thrown in <b>C:\\xampp\\htdocs\\integration\\get.php</b> on line <b>32</b><br />\n","status":200,"statusText":"OK"}

php 请求(mysqli 属性被故意省略):

    $func = $_POST['func'];

if ($func == "getLevel1"){
    getLevel1();
}

$result = array();

function getLevel1(){
    // Create connection
    $conn = new mysqli(servername, username, password, dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT id, name FROM capability_level1";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            $result[] = '<button onclick="capability('. $row["id"] .')">' . $row["name"]. '</button></br>';
        }
        echo json_encode($result);
    } else {
        echo json_encode("0 results");
    }
    $conn->close();
}

js ajax 调用:

async function getLevel1() {
    return $.ajax({
        type: "POST",
        dataType: "json",
        url: "get.php",
        data: {
            func: "getLevel1"
        },
        success: function(data) {
        alert(JSON.stringify(data));
        console.log(data);
        },
        error: function(data) {
        alert("Fehler: "+ JSON.stringify(data));
        }
    });
}

【问题讨论】:

  • json_encode 必须在 while 循环之后,而不是在里面
  • 如果您使用dataType: "json",JQuery 将为您执行JSON.parse(),您可以从您的js 中删除JSON.parse()

标签: javascript php ajax


【解决方案1】:

当你有一个完整的数组要编码时,你需要把json编码:在while之后:

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $result[] = '<button onclick="capability('. $row["id"] .')">' . $row["name"]. '</button></br>';

    }
    echo json_encode($result);
} else {

还请注意,您可能必须将数据类型更改为 Json(并将 json 发送到 php)才能返回它。实际上,您的 Ajax 正在等待返回文本(基于数据类型)

对于您的进一步错误:这与您使用错误的函数从 mysql 获取行有关。有关如何修复它的更多详细信息,请参阅this question

【讨论】:

  • 多么愚蠢的思维错误:S,但它仍然没有提醒任何东西:S
  • 谢谢你,做了更改,现在它从 ajax 调用返回错误消息-.-
  • 查看我的更新。返回错误是因为您使用了错误的函数来检索您将编码的结果。接受的答案就是您要寻找的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2017-01-04
  • 2010-09-24
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多