你好人和机器人,
我正在为系统开发前端 Web 应用程序并且遇到了一个小问题。
整个应用程序必须在一个页面上,这意味着在应用程序主要区域的流程中没有刷新或页面更改。
它还必须在包括 IE7 在内的所有 Web 浏览器中运行,并且可以部署为平板电脑和手机的 HTML5 应用程序。
它基于用户登录,由 webforms 身份验证控制,然后我需要轮询或长轮询服务器以获取更新。如果我可以对系统的每个部分进行请求,这将很简单,但是如果系统变得太大,会话阻塞就会成为一个问题,并且它也可能最终导致自身崩溃。所以我需要做的是想办法发送一个请求并从该请求构建一个响应。
我的第一个想法是使用 JSON 或 XML 构建响应模型,并让 JavaScript 管理需要更新的内容。例如,对某个主题发表了新评论,所有客户几乎都会立即看到此更新。我的想法是发送这样的东西:
[
'd':
{
'addComment' : [{'topicId':'topic1', 'description':'haha'}, {'topicId':'topic1', 'description':'lol'}],
'addTopics' : ['topic2','topic708'],
}
]
JavaScript 然后会解析这个并将“haha”和“lol”添加到 id 为“topic1”的元素中。从理论上讲,这似乎很容易实现,但随着系统变得越来越大,它似乎不断地变得一团糟。
我的第二个想法是简单地拥有一组客户端函数,用于在 DOM 中添加和删除内容,然后使用 JSONP 技术调用此函数。
var addComment = function(commentModel)
{
var topic = document.getElementById(commentModel.topicId),
comments = topic.getElementByClassName('comments')[0],
comment = document.createElement('div');
comment.innerHTML = commentModel.description;
comments.appendChild(comment);
updateUnreadComments();
}
回复:
(function(addComment){
addComment({ topicId : 'topic1', description : 'haha' })
addComment({ topicId : 'topic1', description : 'lol' })
})(addComment)
就个人而言,我发现这两种方法都是一个相当烦人的解决方法,只不过是简单的广播。
我想知道是否有其他人遇到过同样的问题,以及他们是否曾经提出过更有创意的解决方案。
我还想知道 JSONP 会出现什么样的安全问题。
感谢所有帮助!