2011-03-03 77 views
0

打印值我有这个PHP函数:PHP和JSON - 故障对客户端

if(($_POST['id']=="pm_read") && (isset($_POST['pm_id'])) && (ctype_digit($_POST['pm_id'])) && (isset($_SESSION['nickname']))) { 
    $update=mysql_query("UPDATE pm SET readed='1' WHERE id='".$_POST['pm_id']."' AND receiver='".$_SESSION['nickname']."'",$mydb); 
    $query=mysql_query("SELECT COUNT(id) FROM pm WHERE receiver='".$_SESSION['nickname']."' AND readed='0' AND receiver_delete='0' ORDER by date DESC",$mydb); 
    $arrayPm[0]=mysql_result($query,0,'COUNT(id)'); 
    $query=mysql_query("SELECT message FROM pm WHERE id='".$_POST['pm_id']."' AND receiver='".$_SESSION['nickname']."'",$mydb);  
    $arrayPm[1]=mysql_result($query,0,'message'); 
    echo json_encode($arrayPm);  
} 

在客户端,我得到这个数组trought一个jQuery功能:

$.ajax({ 
    type: 'POST', 
    cache: false, 
    url: 'pm/pm_ajax.php', 
    data: 'pm_id='+$(this).attr('id')+'&id=pm_read', 
    success: function(data) { 
     ... here I'll print somethings... 
    } 
}); 

不幸的是,如果我打印data我得到(例如)字符串[“2”,“消息”]。 所以,如果我试图做警报(数据[0])我只会看到[

如何访问此数组以打印正确的结果?我的意思是:

数据[0]必须打印和数据[1]必须打印消息 ...

回答

3

尝试添加

dataType:'json' 

到你的选择在Ajax调用。

+0

哎呀......我的错!我忘了! Hehehe谢谢你,并为你的时间感到难过! :) – markzzz 2011-03-03 15:04:49

+0

没问题,欢迎您:) – Orbit 2011-03-03 15:44:54

3

不要将未过滤的$ _POST超全局插入到mysql_queries中。这是一个安全漏洞。

显然数据是以字符串形式返回的,所以data [0]是第一个字符。相反,你需要JSON。因此,请确保您在PHP中使用头(),设置内容类型:应用程序/ JSON

那么试试这个,你附和你的输出前:

header('content-type: application/json'); 

另外,还要确保您的jQuery请求有

dataType: 'json', 
+0

'千万不要将未过滤的$ _POST超全局插入到mysql_queries中。这是一个安全缺陷。“被过滤的男人!我使用的唯一$ _POST是'$ _POST ['pm_id']',我检查它是否是ctype_digit。所以没有SQL_Injection或其他漏洞的麻烦,是不是? :)关于JSON:是的,我解决了使用dataType:json;) – markzzz 2011-03-03 15:14:10

+0

好吧,只是确保。 – Dexter 2011-03-03 15:15:14

+0

;)谢谢你的建议人! – markzzz 2011-03-03 15:20:38

0

如何:

var obj = jQuery.parseJSON(data); 
alert(obj[0]);