weixin_33709609 2016-04-08 13:43 采纳率: 0%
浏览 35

PHP Array正确的JSON格式

I wrote a ajax call which gets an array returned from a .php file (when btn_getAnswers is clicked). Thats working fine so far with integer data (from database). But if I try to return the array filled with three Strings, no response get returned to the ajax call.

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
?>

If I assign $row[0](or $row[2],$row[3]) to $result[$i] everything works fine. But if I assign $row[1] to $result[$i], the returned "response" is empty, I look it up at "network" of the standard chrome browser development tool.

The only difference between $row[1] and $row[0] and the other columns ([2][3]) is, that the datatype of $row[1] is varchar and the others are int/tinyint.

Obviously the mistake has to be in the last few lines of the .php file. But I don't know what I've done wrong.

For your information: It's about the ajax called which gets triggered when the button with the id "btn_getAnswers" is clicked.

This is the error I am getting from json_encode

Malformed UTF-8 characters, possibly incorrectly encoded

  • 写回答

2条回答 默认 最新

  • weixin_33721427 2016-04-08 14:17
    关注

    I'll expand my comment into an actual answer, for anyone in the future to easily be able to see.

    $row[1] must contain some characters or data that is/are non-UTF8.

    So, use: $result[$i] = utf8_encode($row[0]);

    And it will be parseable by json_encode. I've run into this problem many times myself!

    评论

报告相同问题?

悬赏问题

  • ¥15 三菱变频器模块怎么检测触发
  • ¥30 求一下解题思路,完全不懂。
  • ¥30 关于#硬件工程#的问题:求一下解题思路
  • ¥15 运筹学对偶单纯行法构造扩充问题
  • ¥20 XP系统的老电脑一开机就提示找不到rundll.exe,付费求解
  • ¥15 milvus查询出来的score怎么转换成0-1之间的相似性
  • ¥15 lvgl V9移植到linux开发板
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了,能具体给改一下吗
  • ¥15 Sharepoint JS开发 付费技术指导