javascript - 使用 Comet 长轮询在 Ext JS 中更新模型和存储

标签 javascript ajax model-view-controller extjs comet

我已经使用 Ext.Ajax.request() 实现了 Comet 解决方案,以便在发生超时或收到成功响应时重新初始化相同的请求。

    var http = {

    requestId: 0,
    request: function(timeout){

        Ext.Ajax.request({
            url: '/echo/json/',
            timeout: timeout || 10000,
            method: 'POST',
            scope: http,    // scoped to the http object
            params: {
                json: Ext.encode({ 
                    data: [
                        {
                            id: 1,
                            type: 'notification',
                            timestamp: Ext.Date.format(new Date(), 'timestamp'),
                            from: 1445261,
                            to: 1402804,
                            read: false,
                            important: true,
                            content: 'Lorem ipsum...'
                        } 
                    ]
                }),
                delay: 5
            },
            success: function(resp) {
                if (resp.status === 200){
                    console.log('success');                
                    this.request();   
                }
            },
            failure: function(resp, opts) {
                if (resp.timedout === true) {
                    console.log('failure');  
this.request();                       
                } else {                   
                }
            },
            callback: function(options, success, resp) {
                if (this.requestId === 0) {
                    this.requestId = resp.requestId;
                } 
            }
        }); 

    }

};

http.request();​

我想在 Ext JS MVC 中实现它并利用 native 代理从服务器获取数据并通过模型将其加载到商店中。

查看文档我看不出这是如何完成的,因为您似乎无法访问 Ext.Ajax.request 方法中的成功和失败回调。

有谁知道如何用Ext MVC架构实现长轮询?

上面的示例代码利用了 JSFiddle ajax JSON 响应回显:

http://jsfiddle.net/Dd8q4/

最佳答案

我认为有 3 种方式:

  1. 一个更有趣、更简洁且可能更具挑战性的方法是扩展代理类以保持连接有效。有一个使用 Flicker API 的代理扩展示例 (sencha blog entry)。这可能会帮助您入门。

  2. 手动解析响应并根据响应数据创建模型对象,然后手动将它们插入到您的商店中。

  3. 使用商店回调方法永久加载商店,就像您处理 Ajax 请求一样。向下滚动到 store API 的动态加载部分有关使用回调函数加载商店的示例。还有一个 load 事件监听器,它会在读取数据后启动。

关于javascript - 使用 Comet 长轮询在 Ext JS 中更新模型和存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13657924/

相关文章:

javascript - Js检查对是否存在于对数组中

javascript - 使用 Ajax 添加新图像时动态更新 BxSlider

javascript - 在 Ext JS 4 MVC 应用程序中,什么应该负责加载商店?

javascript - 将数据从 JSON 导入到 django AttributeError : 'WSGIRequest' object has no attribute 'data'

javascript - 我想在 html 中使用 addEvent 而不是 onkeyup

javascript - AngularJS-在一定时间限制后在页面之间切换

javascript - 所有 ajax 调用完成后的事件

jquery - 如何同时使用 jQuery AJAX 请求和 Ruby on Rails 'render' 方法?

javascript - 使用成功方法不使用 $http.get 从 json-angularjs 调用到外部 url 获取 json 数据

java - 对于没有 XML 的 Spring MVC 中的双调度程序配置,URL 映射无法按预期工作