首页 新闻 会员 周边 捐助

关于多个Ajax请求 被阻塞的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-05-03 15:36

我现在有五个Ajax,

 

function MutipulyInvoke()

{

  $.ajax({success:function(){}});

  $.ajax({success:function(){}});

  $.ajax({success:function(){}});

     $.ajax({success:function(){}});

  $.ajax({success:function(){}});

}

 

现在出现的一个问题就是:我第二个Ajax必须要请到第一个请求完成,它才会执行!!

理论上不应该如此吧!!因为这几个请求的周期不一样!!第一个要3秒,第二个只要0.1秒!!

第三个只需要5秒等等!!应该是哪个成功先执行哪个吧!!但是实际情况却是先等到第一个成功后才执行第二个!!

需要格局的主页 需要格局 | 老鸟四级 | 园豆:2145
提问于:2012-05-03 10:35
< >
分享
最佳答案
0

不知道你用的什么浏览器做的开发的。

如果用火狐那么请下载一个firebug,打开控制台面板,然后刷新你的页面,看看这些ajax的请求到底是怎么执行的。

如果用谷歌那么直接Ctrl+Alt+J,打开Network面板,然后刷新你的页面,看看这些ajax的请求到底是怎么执行的。

如果你用IE请无视我。

收获园豆:10
写代码的小2B | 老鸟四级 |园豆:4377 | 2012-05-03 13:58

哥哥!!

看到没……!它是等到第一个结果调用后才去调用第二个的!!

 

第一个请求默认为五秒!而第二个却只有0.01秒!!

但是却非要等 到第一个调用完成后,才去调用第二个!!

需要格局 | 园豆:2145 (老鸟四级) | 2012-05-03 14:18

我不是你哥哥,麻烦你测试以下代码。

<script type="text/javascript" language="javascript">
        $(function () {
            $.get("Handler/Handler1.ashx", function (result) {
                alert(result);
            });
            $.get("Handler/Handler2.ashx", function (result) {
                alert(result);
            });
        });
    </script>
public class Handler1 : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";

        System.Threading.Thread.Sleep(1000 * 5);

        context.Response.Write("Handler1");
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}
public class Handler2 : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Handler2");
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}
写代码的小2B | 园豆:4377 (老鸟四级) | 2012-05-03 14:38

你的为什么就可以!!!

 

我的代码为什么就不可以呢???!

 

$.ajax();和$.get();不一样么???求解答!!!

需要格局 | 园豆:2145 (老鸟四级) | 2012-05-03 15:30

$.get()是对$.ajax()的封装。

$(function () {
            $.ajax({
                "url": "Handler/Handler1.ashx",
                "success": function (result) {
                    alert(result);
                }
            });
            $.ajax({
                "url": "Handler/Handler2.ashx",
                "success": function (result) {
                    alert(result);
                }
            });
            //$.get("Handler/Handler1.ashx", function (result) {
            //    alert(result);
            //});
            //$.get("Handler/Handler2.ashx", function (result) {
            //    alert(result);
            //});
        });
写代码的小2B | 园豆:4377 (老鸟四级) | 2012-05-03 15:36
其他回答(5)
0

如果不这样,我觉得还不正常了

xu_happy_you | 园豆:222 (菜鸟二级) | 2012-05-03 10:39

回调函数的意思不应该是“成功了就通知我么”,那照理说应该是哪个成功了,或者失败了就优先通知道我啊……

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2012-05-03 11:06
0

如果是同一個 域名下的操作,應該是這樣的。你可以跨域實現,就是要把文件放到不同的域名下

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-03 10:58
0

启用异步加载,手动的将那个配置给加上看看

az235 | 园豆:8483 (大侠五级) | 2012-05-03 12:51

什么意思??

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2012-05-03 13:22

你的意思就是说:asyc:true?

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2012-05-03 13:23

默认的不就是true么?……

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2012-05-03 13:23
0

没怎么用过JQUERY,从你的问题描述来看,$.ajas应该是同步函数,只有方法执行完成后才会返回,所以就有了你这样的结果。

要实现同步调用还是有一定的难度的,JQUERY的作者高手!

建议你检查看JQUERY是否有一个异步的AJAX调用方法,要达到你的目的,使用异步调用就可以了,或者就干脆自己写,默认情况下肯定是异步的。

无之无 | 园豆:5095 (大侠五级) | 2012-05-03 13:57
0

我也遇到这个问题了,我是用的jquery form提交表单,要等ajaxSubmit执行完后 才执行其它ajax请求  郁闷中

代码哥 | 园豆:187 (初学一级) | 2014-06-06 01:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册