部分结果是MVC3网格

时间:2011-03-26 18:35:33

标签: c# jquery asp.net-mvc-3 websocket

我查询了几个第三方子系统。有些需要20秒才能返回,再过5秒就会返回。我不希望用户挂在等待屏幕上20秒并返回部分结果。 (缓存结果无法获得更好的速度)

是否有框架或更好的jquery扩展可以帮助我这样做?我正在寻找支持Web套接字的东西,但也为老客户提供了一种轮询方法。

这样做的最佳模式是什么?我很想将Redis用作Polling Server。有更好的想法吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试将Reactive Extensions for .NET (Rx)与Jquery

一起使用

*

  

Rx是标准LINQ的超集   暴露的序列运算符   异步和基于事件   计算作为基于推的,可观察的   通过新的.NET 4.0收集   接口IObservable和   IObserver。这些是   熟悉的数学对偶   IEnumerable和IEnumerator   基于拉的,可枚举的接口   .NET Framework中的集合。

  • *

  

我们很自豪地宣布   Reactive Extensions的可用性   对于Javascript。这个港口带来了   反应式编程的力量   JavaScript的。它允许你使用   JavaScript中的Rx组合器,它   这样做的下载大小更少   超过7Kb(GZipped)。 RxJS提供   现有的易于使用的转换   DOM,XmlHttpRequest和jQuery事件   到Rx推送集合,允许用户   将Rx无缝插入其中   现有的基于JavaScript的网站。

*

答案 1 :(得分:2)

如果你获得了JSON feed,你有没有看过jQuery的extend方法? 示例:

2个Ajax请求,它们响应的时间差,都调用相同的回调函数;

$(function(){
    $.listitems = {};       
    var handleItems = function(data, status){
        if(data){ // check that you have what you need
            $.extend($.listitems, data[0]); // Merge the old and new data
            refreshItems();
        }       
    };
    var refreshItems = function(){
        var markup = [];
        for(var a in $.listitems){
            markup.push('<li>' + $.listitems[a].name + '</li>')
        };
        $('#container').html(markup.join());
    }   
    $.ajax({ url: 'feed1.json', dataType: 'json', success: handleItems});
    $.ajax({ url: 'feed2.json', dataType: 'json', success: handleItems});
});

如果您更喜欢使用Arrays而不是Objects,那么您可以查看Underscore js 它是_.flatten方法。