我应该让用户挂起吗?

时间:2009-11-12 21:02:05

标签: asp.net-mvc ajax jquery-ui jquery

我不确定在这种情况下该怎么做。我有一些启用了ajax的jquery ui 1.7选项卡。现在,当单击一个选项卡时,它将转到我的asp.net mvc控制器操作方法。然后做任何需要的事情并返回局部视图。

现在我不知道为什么,但有时候我的服务器挂起但是又一次我猜所有服务器都挂起了,因为有时当我去网站时它需要永远加载但是如果你做了刷新它会立即加载并且这是相同的我的网站的案例。

我的网站会超快加载一个标签超过X次,然后突然一个请求就会挂起,可能会在15秒之后加载。或者,如果您只是刷新页面,它将返回并再次以超快的速度开始加载它们。

但问题是请求被发送到它挂起的服务器。所以我试着在我所有的ajax上设置一个jquery超时,并调用jquery ui标签的中止。

但它永远不会起作用,我想从我在这个网站上阅读的内容是因为请求在服务器上并且中止不会停止服务器上的东西。所以,如果我看看那个被绞死的请求正在运行的萤火虫。

现在这给我带来了一个巨大的问题,因为它搞砸了整个页面的重点是ajax。就像用户试图点击说另一个标签一样,他们很可能必须点击2次才能加载它。发生的另一件事是,如果该请求完成挂起它们所在的任何选项卡将与该选项卡合并。因此,有时一个选项卡将包含所有其他选项卡中的部分。

因此,如果它挂起并且没有完成它真的与ajax标签混淆。我不知道如何解决这个问题。

所以我不知道该怎么做。

让他们挂起,不管服务器是否需要弄清楚如何完成该请求(当发出ajax请求时我禁用所有选项卡。这是因为如果有人说加载了一个选项卡并且没有让它完成并尝试转到另一个选项卡,同时将选项卡合并在一起会出现同样的问题。或者中止请求并搞砸了​​。

我得到了很好的选择。有人有更好的选择吗?

由于

4 个答案:

答案 0 :(得分:1)

我不确定你的意思是“jquery timeout”。如果你的意思是setTimeout,那肯定是行不通的。如果你的意思是,另一方面,

$.ajax({
     url:"myserverprocess", 
     timeout: 200, 
     error: function () { /* try again */ }, 
     success: function (myadata) { alert("mydata")}
});

然后应该工作。如果还没有,请尝试超时选项。

编辑: 你可以尝试:

$(selector).tabs({
    ajaxOptions: {
        url:"myserverprocess", 
        timeout: 200, 
        error: function () { /* try again */ }, 
        success: function (myadata) { alert("mydata")}
    }
});

答案 1 :(得分:1)

我们在这里遇到类似的情况,因为当天第一个到达现场的人将会在装载东西时延迟15秒。

在我们的情况下,在通过jQuery对服务器的所有调用中,我已经设置了正常的javascript超时2秒。 2秒钟后,我弹出一个小div,说事情说的比预期的要长,请耐心等待。

再过6秒钟后,我关闭了那个div并开了一个新的道歉。

不是一个很好的解决方案,但它确实让用户保持在循环中,让事情顺利进行,我们承认事情并不完美。

我们在这里称之为温暖和模糊。 :)

答案 2 :(得分:0)

我们使用jquery队列管理器 - http://www.protofunc.com/scripts/jquery/ajaxManager/

取得了很好的成功

当执行第二个请求时,它会中止第一个请求。我不确定暂停时间,但你可以使用几个选项。

答案 3 :(得分:0)

您可以使用Jquery在ajax调用上设置超时,然后在错误部分中捕获它。一旦被抓住,您可以处理重试或进行任何必要的清理。

相关问题