jquery ajax问题请教

发布于 2021-11-16 20:57:50 字数 1305 浏览 743 评论 5

<script>
for(i=0;i<data['content'].length;i++){
        var pid=data['content'][i];
        //alert(pid);
         $.ajax({
                url:'demo.php',
                type:'post',
                data:{"pid":pid,"qualifier":$('#qualifier').val()},
                timeout:1,
                beforeSend:function (){
                    $('#tips').append('<p id="process'+pid+'"><span class="blue">产品'+pid+'数据处理中...</p>');    
                },
                success:function(data){
                },
                error:function error(xhr,msg,error){
                    if(msg=='timeout'){
                            $('#process'+pid).append('<span class="alert">'+pid+'连接超时</span>');
                    }else{
                            $('#process'+pid).append('<span class="alert">'+pid+'系统错误</span>');
                    }
                },
            });     
}


得到的结果

产品1数据处理中...

产品2数据处理中...2连接超时2连接超时

不是我预期的:

产品1数据处理中...1连接超时

产品2数据处理中...2连接超时

什么地方错了?

还有我这样写,是逐条将data['content']里的数据发送到demo.php,一条处理完后再执行下一条吧

好像加上async: false,后,才会是一条处理完再处理,下一条,但加上后,连接超时提示一条都没有显示

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

带上头具痛哭 2021-11-20 11:43:36

请教这种回调怎么写?能大致给段代码吗?

瑾兮 2021-11-20 11:40:15

思路是对的,代码有点小错误,感谢

水水月牙 2021-11-20 05:49:06

1. jQuery的ajax默认是异步的,异步的请求并不保证能按发出的顺序完成。

2. 同步的请求,应该不能设置超时 。

3. 你这种需求使用请求链应该可以实现,即在产品1处理成功或超时的回调里处理产品2,产品2的回调里处理产品3……

瀞厅☆埖开 2021-11-18 11:45:20

ajax处理是异步的,你不能把data写在外面进行判断。如果要这样做就必须把async: false,为同步。

所以你应该把处理程序写在success:function(){}里面。

流心雨 2021-11-18 03:46:40

 

var pids = data['content'];
var idx = 0;
function dealWithProduct(pid) {
	 $.ajax({
                url:'demo.php',
                type:'post',
                data:{"pid":pid,"qualifier":$('#qualifier').val()},
                timeout:1,
                beforeSend:function (){
                    $('#tips').append('<p id="process'+pid+'"><span class="blue">产品'+pid+'数据处理中...</p>');    
                },
                success:function(data){
		        if(++idx < pids.length) {
  			    dealWithProduct(pid[idx]);
		        }
                },
                error:function error(xhr,msg,error){
                    if(msg=='timeout'){
                            $('#process'+pid).append('<span class="alert">'+pid+'连接超时</span>');
                    }else{
                            $('#process'+pid).append('<span class="alert">'+pid+'系统错误</span>');
                    }
		    if(++idx < pids.length) {
			 dealWithProduct(pid[idx]);
		    }
                },
            });
}
// 开始请求链
dealWithProduct(0);

 大致是这个意思,你试试?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文