我试图为自己和朋友制作一个基本的聊天系统。这很简单,然而,ajax让我非常困惑。我使用ajax来请求一个php页面,我设置了一个用户名,以及我最后一次下载聊天。但是,我不知道如何阅读php页面的回声。我已经在网上查了一下,但是有很多变化,让我更加困惑。有人可以给我一些指导吗?
Scripts.js(已经链接了jQuery)
// on document ready + called every second
$.ajax({
url: 'download.php',
type: 'REQUEST',
datatype: 'json',
data: ({
last_downloaded: latestTimestamp,
username: username
}),
success: function (data) {
console.log(data.message[0].time);
// Uncaught TypeError: Cannot read property '0' of undefined
// how do I get the time from the json?
// {"message":{"chat":"Hello, world!","time":"2014-05-09 17:32:00,"username":"Josue"},"message":{"chat":"This is my second message.","time":"2014-05-09 17:32:05,"username":"Josue"}}
}
});
latestTimestamp = data.message[0].time;
downloadingTimer = setTimeout(actuate, timeoutValues[currentTimeoutIndex]);
}
的download.php
这是我的php页面作为普通字符串回显(现在格式正确的JSON):
[
{
"chat":"Hello, world!",
"time":"2014-05-09 17:32:00",
"username":"Josue"
},
{
"chat":"This is my second message.",
"time":"2014-05-09 17:32:05",
"username":"Josue"
}
]
我的页面顶部有header("Content-Type: application/json");
。我做错了什么?
答案 0 :(得分:1)
您的JSON响应格式不正确。日期戳后面的逗号位于引号内,而不是在它之外:
"time":"2014-05-09 17:32:00," username":"Josue"
},
此外,您应该使用方括号来表示消息数组。您的JSON应如下所示:
{ "message": [
{
"chat":"Hello, world!",
"time":"2014-05-09 17:32:00",
"username":"Josue"
},
{
"chat":"This is my second message.",
"time":"2014-05-09 17:32:05",
"username":"Josue"
}
]
}
您可以使用json_encode()函数将PHP数组或对象转换为JSON字符串:
<?php
$my_arr = array("message" => array());
$my_arr["message"][] = array("chat" => "Hello, World!", "time" => "2014-05-09 17:32:05", "username" => "Josue");
echo json_encode($my_arr);
?>
答案 1 :(得分:0)
我认为它失败了,因为消息不是数组。 message是一个对象,所以如果你有更多的消息重新设计你发送它们的方式。你的php脚本应该把消息放在一个json数组中,这样你就可以得到第一个带有0-index
的消息答案 2 :(得分:0)
这有两个问题。
一,您的JSON格式不正确。 "time":"2014-05-09 17:32:00," username":"Josue"
应为"time":"2014-05-09 17:32:00", "username":"Josue"
。您可能已经在浏览器的错误控制台中看到了这一点。
二,您需要将消息放入数组中。否则,你只是用每条新消息覆盖你的message
属性,所以你的前端最终只能得到你php文件中最低的消息。
PHP应该回应这个:
{
messages: [
{
"chat":"Hello, world!",
"time":"2014-05-09 17:32:00",
"username":"Josue"
},
{
"chat":"Second message",
"time":"2014-05-09 17:32:00",
"username":"Josue"
}
]
}
然后在您的JS中,您的数组将为data.messages
,邮件分别为data.messages[0]
和data.messages[1]
。
答案 3 :(得分:0)
重新格式化JSON后,您也可能尝试将JSON字符串解析为javascript对象。
var parsed_data = $.parseJSON(data);
// extract data here parsed_data[key]