有问题捆绑在一起的基本javascript聊天页面
Having issues tying together basic javascript chat page
我有一个聊天页面的骨架,但我有问题把它绑在一起。我要做的是有消息发送到服务器每当用户点击发送,也为显示每3秒更新的消息。任何见解、提示或一般性评论都将不胜感激。
当前问题:
-
当我取回时,我附加了
<ul class="messages"></ul>
,但不想重新附加我已经取回的消息 -
确保我的chatSend工作正常,但如果我运行chatSend,然后chatFetch,我不检索我发送的消息
var input1 = document.getElementById('input1'), sendbutton = document.getElementById('sendbutton');
function IsEmpty(){
if (input1.value){
sendbutton.removeAttribute('disabled');
} else {
sendbutton.setAttribute('disabled', '');
}
}
input1.onkeyup = IsEmpty;
function chatFetch(){
$.ajax({
url: "https://api.parse.com/1/classes/chats",
dataType: "json",
method: "GET",
success: function(data){
$(".messages").clear();
for(var key in data) {
for(var i in data[key]){
console.log(data[key][i])
$(".messages").append("<li>"+data[key][i].text+"</li>");
}
}
}
})
}
function chatSend(){
$.ajax({
type: "POST",
url: "https://api.parse.com/1/classes/chats",
data: JSON.stringify({text: $('input1.draft').val()}),
success:function(message){
}
})
}
chatFetch();
$("#sendbutton").on('click',chatSend());
对于Knockout.js来说,这似乎是一个非常好的项目,特别是如果你想确保你没有重新添加你已经发送的消息。由于图书馆在很大程度上就是为这类事情服务的,我认为充分利用它的潜力是有意义的。因此,假设您的API已经负责限制返回的消息数量,搜索正确的消息等,并严格关注UI。我们可以从聊天消息的Javascript视图模型开始…
function IM(msg) {
var self = this;
self.username = ko.observable();
self.message = ko.observable();
self.timestamp = ko.observable();
}
这是采取一些自由,并假设您得到一个IM对象,其中包含发送消息的用户的名称,内容以及消息的时间戳。希望能够访问这些数据元素可能并不太牵强,对吧?接下来是封装im的大视图模型…
function vm() {
var self = this;
self.messages = ko.observableArray([]);
self.message = ko.observable(new IM());
self.setup = function () {
self.chatFetch();
self.message().username([user current username] || '');
};
self.chatFetch = function () {
$.getJSON("https://api.parse.com/1/classes/chats", function(results){
for(var key in data) {
// parse your incoming data to get whatever elements you
// can matching the IM view model here then assign it as
// per these examples as closely as possible
var im = new IM();
im.username(data[key][i].username || '');
im.message(data[key][i].message || '');
im.timestamp(data[key][i].message || '');
// the ([JSON data] || '') defaults the property to an
// empty strings so it fails gracefully when no data is
// available to assign to it
self.messages.push(im);
}
});
};
}
好了,我们有了Javascript模型它会通过绑定更新屏幕(稍后会详细介绍)我们正在获取和填充数据。但是我们如何更新和发送即时消息呢?还记得那个self.message
吗?我们现在就要用了。
function vm() {
// ... our setup and initial get code
self.chatSend = function () {
var data = {
'user': self.message().username(),
'text': self.message().message(),
'time': new Date()
};
$.post("https://api.parse.com/1/classes/chats", data, function(result) {
// do whatever you want with the results, if anything
});
// now we update our current messages and load new ones
self.chatFetch();
};
}
好,那么我们如何跟踪所有这些呢?通过绑定的魔力。这不是魔法,knockout。js内部的Javascript会监听更改并相应地更新元素,但你不用担心这个。你只需要担心你的HTML应该是这样的…
<div id="chat">
<ul data-bind="foreach: messages">
<li>
<span data-bind="text: username"></span> :
<span data-bind="text: message"></span> [
<span data-bind="text: timestamp"></span> ]
</li>
</ul>
</div>
<div id="chatInput">
<input data-bind="value: message" type="text" placeholder="message..." />
<button data-bind="click: $root.chatSend()">Send</button>
<div>
现在,填充绑定并保持它们更新的最后一步是调用视图模型和它的方法…
$(document).ready(function () {
var imVM = new vm();
// perform your initial search and setup
imVM.setup();
// apply the bindings and hook it all together
ko.applyBindings(imVM.messages, $('#chat')[0]);
ko.applyBindings(imVM.message, $('#chatInput')[0]);
// and now update the form every three seconds
setInterval(function() { imVM.chatFetch(); }, 3000);
});
所以这应该给你一个相当不错的开始在一个HTML页面上的聊天系统。我将把验证、样式化和美化留给程序员作为练习……
- 进行自动实时聊天/虚假聊天,我的javascript跳过了第一个响应
- Javascript/Php聊天-输入is'不能在一个文本框中工作
- 用Javascript在JavaWebApp上实现类似facebook的聊天
- Javascript+Pubnub聊天通知
- 用于聊天的纯 JavaScript 长轮询
- 聊天声音未在 JavaScript 中播放
- 如何使用Username/Password auth选项连接到Facebook聊天,并成功地用Javascript或Ru
- 你知道一个易于安装的javascript聊天吗
- 如何创建javascript聊天
- Javascript聊天文本到底部
- Javascript -聊天机器人
- Javascript聊天颜色
- 制作一个javascript聊天机器人,将聊天命令转换为另一个程序中的按键
- 使用Memcache构建PHP/Javascript聊天室
- javascript聊天箱/信使脚本
- 在javascript聊天机器人中实现回发操作代码的位置
- javascript聊天显示消息
- 对一些Javascript聊天室代码进行逆向工程
- 如何在c#中嵌入javascript聊天客户端
- 有问题捆绑在一起的基本javascript聊天页面