使用echo
asinnerHTML
是乞求人们在你的代码中注入各种有趣的东西。
在游戏的这一点上,您可能应该使用 JSON 来回发送消息,并编写 JS 来创建您希望在浏览器中看到的内容。
如果我正在创建一个消息传递系统,我可能会这样:
浏览器 内(无样式)
• Norguard
My message
2012-10-02 10pm
• Norguard
Message 2
2012-10-02 11pm
HTML
<!-- basic idea of what I'm working with in the end result -->
<ul id="message-list">
<li><span class="username">Norguard</span><p class="content">My Message</p><time datetime="2012-10-02T22:00:00.000Z" pubdate>2012-10-02 10pm</time>
</ul>
JS (程序)
// This might be a really basic implementation of functions to display messages
var Messager = {
parent : document.getElementById("message-list"),
update : function () { /* get messages from server */ },
buildMessage : function (message) {
var frag = document.createDocumentFragment,
name = document.createElement("span"),
body = document.createElement("p"),
time = document.createElement("time");
name.className = "username";
body.className = "content";
time.setAttribute("pubdate", "pubdate");
name.innerText = message.userName;
body.innerText = message.content;
time.setAttribute("datetime", message.timestamp);
time.innerText = message.friendlyDate;
frag.appendChild(name);
frag.appendChild(body);
frag.appendChild(time);
return frag;
},
buildMessages = function (messages) {
var parentFrag = document.createDocumentFragment(),
messenger = this;
messages.forEach(function (message) {
var li = document.createElement("li"),
messageFrag = messenger.buildMessage(message);
li.appendChild(messageFrag);
parentFrag.appendChild(li);
});
return parentFrag;
},
writeMessages = function (newMessages) {
this.domElement.appendChild(newMessages);
// or do whatever sorting is required, et cetera
}
};
JS (结果处理)
// this might be like what your XHR callback looks like (this is really basic)
xhr.onreadystatechange = function () {
if (!this.readyState === 4 && (!this.status == 200 || !this.status == 302)) { return; }
var json = "",
data = "",
messages;
json = this.responseText;
data = JSON.parse(json);
messages = Messager.buildMessages(data);
Messager.writeMessages(messages);
};
JSON (响应文本)
// What your JSON response would be
[
{
"username" : "Norguard",
"content" : "My message",
"timestamp" : "2012-10-02T22:00:00.000Z",
"friendlyDate" : "2012-10-02 10pm"
}, {
"username" : "Norguard",
"content" : "Message 2",
"timestamp" : "2012-10-02T23:00:00.000Z",
"friendlyDate" : "2012-10-02 11pm"
}
]
请注意,您不应该在 JSON 中添加友好的日期,而是应该使用 JS 和每条消息中的时间戳转换为用户的本地时间......但这是一个演示如何用尽可能少的装饰来完成整个包装。
从 PHP 中,您可以以任何存储方式获取消息(数据库、csv、不同的文本文件... ...从 Twitter 流式传输... ...随便),然后将它们全部放在一个数组中.
PHP
// Your PHP for the data above might look like this:
$msgArray = array(
array( "username" => "Norguard",
"content" => "My message",
"timestamp" => "2012-10-02T22:00:00.000Z",
"friendlyDate" => "2012-10-02 10pm" ),
array( "username" => "Norguard",
"content" => "Message 2",
"timestamp" => "2012-10-02T22:00:00.000Z",
"friendlyDate" => "2012-10-02 11pm" )
);
$jsonData = json_encode($msgArray);
echo $jsonData;
这很可能有错误——我没有在密码键盘上写这个,我只是在这里写的,从我的头顶开始。
它也不意味着是 100% 完整的代码。例如,我没有介绍如何设置 XMLHttpRequest,或者进行任何事件处理,或者做任何 UI 工作(比如按时间戳对消息进行排序,或者删除重复项或添加更新按钮)。
这只是将 JSON 数据从 PHP 获取到 JS(Chrome/FF/Safari/newer IE)的基本必需品,以及将这些数据放入 HTML 并将其放入页面的非常简单的策略。