2014-12-07 52 views
1

我呼应的JSON用PHP,像这样:查询PHP jsonencode结果在JavaScript

$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); 
    } 

上面的函数必须为数组区域中的每个区域调用以下函数并返回oc currences

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

上述结果在“遗漏的类型错误:无法读取属性‘0’的未定义”:“未捕获的SyntaxError当我使用的数据我得到这样一个错误的json.parse

:意外的令牌{

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

我在做什么错在这里 当我使用json.parse我得到一个错误,说明了unexpectit令牌

我已经改变了服务器上的查询和?它现在definitly根据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恢复到呼应 回声json_encode($ JSON);

+1

首先在弗里斯兰所有完整的报价”,这样 ‘弗里斯兰JS会失败你jsonstring解码’, – 2014-12-07 18:12:28

+0

有你尝试用'var regions = {...}替换'var regions = [...]' – 2014-12-07 18:13:07

+0

这里的引号是一个错字,而不是原因。得到如下错误:“未捕获的SyntaxError:意外的令牌, – ingridsede 2014-12-07 18:39:37

回答

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会在答案之前或之后回应一些新的行或其他craty事物。 charset怎么样?你的服务器可能在iso-something中回答吗?其次,如果有一些疯狂的字符(U,SS,C)

最后一件事

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

服务器回显:UTF8。 PHP的内容头是:header('Content-Type:text/html; charset = utf-8');至于数组...只给我[] [] [] []。如果你想检查php的输出,你现在可以看到它:http://transonly.nl/lib/class/json.php?test – ingridsede 2014-12-07 19:25:23

+1

chekc我的“最后的东西”......你在呼应许多对象,但没有围绕它的数组......它必须看起来像这个'[{...},{...}]''你看起来像这样'{...} {...} – 2014-12-07 19:55:34

+0

好吧,我现在用它回显括号,你可以在transonly.nl/lib/class/json.php?test中看到。结果如下:Uncaught TypeError:无法读取未定义的属性'0'。 – ingridsede 2014-12-07 20:29:43