【问题标题】:query php jsonencode result in javascript在javascript中查询php jsonencode结果
【发布时间】:2025-12-22 16:10:16
【问题描述】:

我用 php 回显 json,如下所示:

 $jsonarray= array();     
while($rs = mysqli_fetch_assoc($result)) {

 $jsonarray["userName"]= $rs["userName"];
 $jsonarray["UserGender"]= $rs["UserGender"];
 $jsonarray["channel"]= $rs["channel"];
 $jsonarray["channelName"]= $rs["channelName"];
 $jsonarray["camonoff"]= $rs["camonoff"];
 $jsonarray["rtccam"]= $rs["rtccam"];
 $jsonarray["iswatching"]= $rs["iswatching"];
 $jsonarray["iswatchingembed"] = $rs["iswatchingembed"];
 $jsonarray["islisteningtoradio"]= $rs["islisteningtoradio"];
 $jsonarray["statusmsg"] = $rs["statusmsg"];
 $jsonarray["activity"]= $rs["activity"];

 echo json_encode($jsonarray);   
 }

通过 ajax 调用,我得到如下字符串:

 $.get('lib/class/json.php', data, function(returnData) {
jsondata= returnData;
jsonupdateregion(jsondata);
});

我将接收到的数据传递给如下函数:

function jsonupdateregion(jsondata) {
var regions = ["Lobby", "Noord-Brabant", "Groningen", "Friesland", "Gelderland", "Limburg", "Zeeland", "Overijssel", "Drenthe", "Noord-Holland",   "Zuid-Holland", "Utrecht", "Belgie", "Duitsland"];   
 var i;
  str= "";      
 for (i = 0; i < regions.length; i++) {
   str += regions[i]
       +  getCount(regions[i], jsondata);
  }
  console.log(str);
  }

上述函数必须为数组区域中的每个区域调用以下函数并返回出现次数

function getCount(regions, jsondata) {
var count = 0;
for (var i = 0; i < jsondata.length; i++) {
    if (jsondata.channelName[i] == regions) {
        count++;
    }
 }
 return count;
}

上面的结果是“Uncaught TypeError: Cannot read property '0' of undefined”

当我在数据上使用 json.parse 时,我得到一个错误,例如:“ Uncaught SyntaxError: Unexpected token {

php 文件本身发送一个标题:“header('Content-Type: text/html; charset=utf-8');”

我在这里做错了什么? 当我使用 json.parse 时,我收到一个错误,指出意外令牌

我已经更改了服务器上的查询,现在它肯定会根据http://jsonlint.com/ 输出有效的 Json。

 if(isset($test)){

           $sql = 'SELECT                   
                userName,                   
                UserGender,
                UserRegion,
                channel,                
                channelName,
                camonoff,
                rtccam,
                iswatching,
                iswatchingembed,
                islisteningtoradio,
                statusmsg,
           activity

            FROM
                users'; 

       $result=mysqli_query($conn,$sql);

       $json = array();
       if(mysqli_num_rows($result)){
    while($row=mysqli_fetch_assoc($result)){
           $json[]=json_encode($row);
      }
   }
   mysqli_close($mysqli);
   echo json_encode($json);

 }

更新:

问题出在javascript中:

不得不改变:

for (i = 0; i < obj.length; i++) {
    if (obj.channelName[i] == regions) {
        count++;
    }

到:

for (i = 0; i < obj.length; i++) {
    if (obj[i].channelName == regions) {
        count++;
    }

并在 php 中恢复回显 echo json_encode($json);

【问题讨论】:

  • 首先在弗里斯兰完整报价”,比如这个“弗里斯兰”,
  • 你试过用var regions = {...}替换var regions = [...]
  • 这里的引号是一个错字,不是原因。将 [ 变为 { 也不会这样做。我收到如下错误:“ Uncaught SyntaxError: Unexpected token ,
  • 您将多少条记录转换为 JSON?您使用 while 循环的事实似乎不止一个。
  • @mickey 大约有 100 条记录。您现在可以在transonly.nl/lib/class/json.php?test 看到结果

标签: javascript php json


【解决方案1】:

首先,尝试给 jquery 一个提示,发送 json 并查看它在浏览器控制台中接收到的内容 (http://api.jquery.com/jquery.get/)

$.get('lib/class/json.php', data, function(returnData) {
    var jsondata = returnData;
    console.log(jsondata); 
    jsonupdateregion(jsondata);
}, 'json);

它应该输出一个对象或只是一个字符串....最终您的 php 在答案之前或之后会回显一些新行或其他古怪的东西。 字符集呢?您的服务器是否可能以 iso-something 回答?如果有一些疯狂的字符(ü,ß,ç),那么js将无法解码您的jsonstring

最后一件事

$jsonarray = array();     
while($rs = mysqli_fetch_assoc($result)) {
    $jsonarray[] = $rs; //add an element.. do not overwrite it
}
echo json_encode($jsonarray);   

【讨论】:

  • 服务器正在回显:UTF8。 php 的内容标头为: header('Content-Type: text/html; charset=utf-8');至于数组......它只给了我[][][][]。如果您想检查 php 的输出,您现在可以在以下位置看到它:transonly.nl/lib/class/json.php?test
  • 检查我的“最后一件事”...您正在回显许多对象,但周围没有数组....它必须看起来像这样[{...},{...}]你的看起来像这样@987654326 @
  • 好的,我现在用它来呼应括号,你可以在 transonly.nl/lib/class/json.php?test 看到。结果再次出现:未捕获的类型错误:无法读取未定义的属性“0”。
  • 太多的转义......你在呼应["{\"use...它应该是[{"use...,试试我的第二个答案
  • 无论如何,请尝试第二个 sn-p.... 不要在循环中回显,你最后一个“对象”不应该跟 ,,其他的应该。 ...所有对象都应该封装在一个数组中