2011-03-03 78 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]);