在javascript中查询php jsonencode结果

时间:2014-12-07 18:08:16

标签: javascript php json

我正在用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;
}

上面的结果是“未捕获的TypeError:无法读取属性'0'未定义”

当我在数据上使用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++;
    }

TO:

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

并在PHP中恢复回声     echo json_encode($ json);

1 个答案:

答案 0 :(得分:2)

首先,尝试给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在答案之前或之后回应一些新的线条或其他琐碎的东西。 怎么样的charset?您的服务器是否可以使用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);