PHP数组正确的JSON格式

时间:2016-04-08 13:43:13

标签: javascript php mysql json ajax

我写了一个ajax调用,它从.php文件中返回一个数组(点击btn_getAnswers时)。到目前为止,这是完整的数据(来自数据库)。但是如果我尝试返回填充了三个字符串的数组,则不会将响应返回到ajax调用。

的index.html:

<!DOCTYPE html>
<html>
<head>
    <script src="jquery-1.12.3.js"></script> <!-- Import the jquery extension -->
    <script>
        $(document).ready(function(){

            $("#btn_getQuestion").click(function(){
                $.ajax({type :"POST",
                        url: "DBCOMQUESTIONS.php?q=" + $("#input").val(),
                        success: function(result){ //Performs an async AJAX request
                    if(result){
                         $("#output").append(result); //assign the value of the result to the paragraph with the id "output"
                    }
                }});
            }),

            $("#btn_getAnswers").click(function(){
                $.ajax({type :"POST",
                        url: "DBCOMANSWERS.php?q=" + $("#input").val(),
                        dataType:"json",
                        success: function(result){ //Performs an async AJAX request
                    if(result){
                        result.forEach(function(i,v){
                            $("#output").append("<br>" + i);
                        })
                    }
                }});
            });

        });
    </script>
</head>
<body>

<p id="output">This is a paragraph.</p>

<input id="input"/>
<button id="btn_getQuestion">Question</button>
<button id="btn_getAnswers">Answers</button>

</body>
</html>

DBCOMANSWERS.php:

<?php
include("connection.php");  //includes mysqli_connent with database
include("ErrorHandler.php"); //includes error handling function

set_error_handler("ErrorHandler"); //set the new error handler

$q = intval($_GET['q']);
$sql="SELECT * FROM tbl_answers WHERE QID ='".$q."'"; //define sql statement
$query = mysqli_query($con,$sql); // get the data from the db
$result = [];
$i = 0;

while ($row = $query->fetch_array(MYSQLI_NUM)){
    $result[$i] = $row[0];
    $i += 1;
}


mysqli_close($con); // close connection with database
header('Content-Type: application/json');
echo json_encode($result); // return value of $result
?>

如果我将$row[0](或$row[2],$row[3])分配给$result[$i],一切正常。 但是,如果我将$row[1]分配给$result[$i],则返回的“响应”为空,我会查看标准Chrome浏览器开发工具的“网络”。

$row[1]$row[0]以及其他列([2] [3])之间的唯一区别是,$row[1]的数据类型是varchar而其他的是int / tinyint 。

显然,错误必须出现在.php文件的最后几行。但我不知道我做错了什么。

有关您的信息:这是关于调用的ajax,当点击ID为“btn_getAnswers”的按钮时会触发该

这是我从json_encode

获得的错误
  

格式错误的UTF-8字符,可能编码错误

2 个答案:

答案 0 :(得分:2)

所以看起来您的数据库不存储UTF-8字符。因此,在运行json_encode之前,您需要确保将字符转换为UTF-8

$result = [];

while ($row = $query->fetch_array(MYSQLI_NUM)){
    $result[] = mb_convert_encoding($row[1], 'UTF-8');
}

那应该将你的角色转换为UTF-8。请注意,这适用于所有编码,而utf8_encode()仅适用于一个

答案 1 :(得分:1)

我会将我的评论扩展为实际答案,以便将来能够轻松查看。

$ row [1]必须包含一些非UTF8的字符或数据。

所以,使用: $result[$i] = utf8_encode($row[0]);

它将由json_encode解析。我自己多次遇到这个问题!