鍍金池/ 問(wèn)答/HTML5  HTML/ AJAX請(qǐng)求如何依次執(zhí)行。

AJAX請(qǐng)求如何依次執(zhí)行。

產(chǎn)品要寫(xiě)一個(gè)類似檢測(cè)的東西
有四塊內(nèi)容檢測(cè),要發(fā)四個(gè)AJAX。
我想到的$,when
但是用這個(gè)的話,后面三個(gè)done時(shí)間是立馬執(zhí)行的。
我就寫(xiě)了一個(gè)settimeout

但是里面有一個(gè)依次打?qū)μ?hào)的我就寫(xiě)了一個(gè)setInterval
但是這個(gè)時(shí)間老是對(duì)不上。
發(fā)現(xiàn)寫(xiě)法很有問(wèn)題 有沒(méi)有什么好點(diǎn)的寫(xiě)法 或者指出我的錯(cuò)誤。

$('.txturl button').click(function() {
            var count = 0
            $.when($.ajax({
                type: "get",
                url: "http://www.webossgoo3.com/google/CheckContent",
                async: true,
                success: function(data) {
                    var pardata = JSON.parse(data)
                    $('.gdt').addClass('layui-anim layui-anim-rotate layui-anim-loop');
                    $('.coun-jc').hide();
                    $('.txt-bet li').removeClass('active')
                    $('.txtnum section span.load-jc').css('display', 'table-cell');
                    if(pardata.title) {
                        $('.cont2 i').html('ဆ')
                        $('.cont2 i').css('color', 'red')
                        for(j in pardata.title) {
                            $('.contentul ul').eq(0).append(
                                "<li>" + j + ":" + pardata.title[j] + "</li>"
                            )
                        }
                    };
                    for(k in pardata.keywords) {
                        $('.contentul ul').eq(1).append(
                            "<li>" + k + ":" + pardata.keywords[k] + "</li>"
                        )
                    }
                    if(!pardata.original) {
                        $('.cont1 i').html('&#x1006;');
                        $('.cont1 i').css('color', 'red')
                    }
                        var i = 0;
                    setInterval(function() {
                        if(i <= $('.basetxt table i').size() - 1 ) {
                            $('.basetxt table i').eq(i).show()
                            i++
                        } else {
                            $('.txt-bet li').eq(0).addClass('active')
                            return false
                        }
                    }, 500) 
                },
                error: function() {
                    layer.msg('檢測(cè)失敗1')
                }
            })).done(function() {
                setTimeout(function  () {
                    $.ajax({
                        type: "get",
                        url: "http://www.webossgoo3.com/google/checkSearch",
                        async: true,
                        success: function(data) {
                            var pardata = JSON.parse(data)
                            if (pardata.google) {
                                $('.cont3 i').html('&#x1006;')
                                $('.cont3 i').css('color', 'red')
                            }
                            if (pardata.bing) {
                                $('.cont4 i').html('&#x1006;')
                                $('.cont4 i').css('color', 'red')
                            }
                            if (pardata.yahoo) {
                                $('.cont5 i').html('&#x1006;')
                                $('.cont5 i').css('color', 'red')
                            }
                            if (pardata.title_top1) {
                                $('.cont6 i').html('&#x1006;')
                                $('.cont7 i').css('color', 'red')
                            }
                            var a = 0;
                            setInterval(function() {
                                if(a <= $('.seartxt  table i').length - 1) {
                                    $('.seartxt table i').eq(a).show()
                                    a++
                                } else {
                                    $('.txt-bet li').eq(1).addClass('active')
                                    return false
                                }
                            }, 500)
                        },
                        error: function() {
                            layer.msg('檢測(cè)失敗2')
                        }
                    })
                })
                
            }).done(function() {
                setTimeout(function  () {
                    $.ajax({
                        type: "get",
                        url: "http://www.webossgoo3.com/google/CheckSearch",
                        async: true,
                        success: function(data) {
                            var pardata = JSON.parse(data)
                            var i = 0;
                            setInterval(function() {
                                if(i <= $('.seotxt  table i').length - 1) {
                                    $('.seotxt  table i').eq(i).show()
                                    i++
                                } else {
                                    $('.txt-bet li').eq(2).addClass('active')
                                    return false
                                }
                            }, 500)
                        },
                        error: function() {
                            layer.msg('檢測(cè)失敗3')
                        }
                    })
                },500 * ($('.seartxt  table i').length) )
            }).done(function() {
                setTimeout(function  () {
                    $.ajax({
                        type: "get",
                        url: "http://www.webossgoo3.com/google/CheckContent",
                        async: true,
                        success: function(data) {
                            var pardata = JSON.parse(data)
                            var i = 0;
                            setInterval(function() {
                                if(i <= $('.basetxt table i').length - 1) {
                                    $('.opttxt table i').eq(i).show()
                                    i++
                                } else {
                                    $('.txt-bet li').eq(3).addClass('active')
                                    $('.gdt').removeClass('layui-anim layui-anim-rotate layui-anim-loop');
                                    $('.coun-jc').show()
                                    $('.coun-jc').text('88')
                                    $('.txtnum section span.load-jc').css('display', 'none');
                                    return false
                                }
                            }, 500)
                        },
                        error: function() {
                            layer.msg('檢測(cè)失敗4')
                        }
                    })
                },500 * ($('.seotxt  table i').length)  +  500 * ($('.seartxt  table i').length)  )
            })
        })
回答
編輯回答
萌面人
  1. 用promise
  2. 自己創(chuàng)建事件流
  // 事件流
  let eventBus = $('<i></i>')
  eventBus.on('event1Done', doEvent2)
  eventBus.on('event2Done', doEvent3)

  function doEvent1() {
    $.ajax({
      url: 'http://www.baidu.com',
      error: function () {
        eventBus.trigger('event1Done', {msg: 'event1 done'})
        // trigger觸發(fā)下個(gè)事件并傳遞參數(shù)
      }
    })
  }
  function doEvent2 (event, data) {
    // data接收上個(gè)事件的參數(shù)
    // 同1
  }
  function doEvent3 (event, data) {
    // 同2
  }
  doEvent1()
2017年11月5日 07:57
編輯回答
安淺陌

你可以利用Promise機(jī)制,把四個(gè)請(qǐng)求寫(xiě)成四部分,然后按照順序執(zhí)行,比如A() B() C() D()四個(gè)函數(shù),可以寫(xiě)成:

.`

A() //A的ajax成功后,利用resove跳出,進(jìn)入B中進(jìn)行下一個(gè)ajax,以此列推
.then(function() {
    B()
})
.then(function() {
    C()
})
.then(function() {
    D()
})  

`

2017年3月11日 11:30
編輯回答
妖妖

可以了解一下ES6的generator方法

2018年8月27日 17:10
編輯回答
近義詞

最簡(jiǎn)單的你就在每個(gè)ajax請(qǐng)求的complete函數(shù)里去執(zhí)行下一個(gè)ajax請(qǐng)求咯

2017年6月7日 15:13
編輯回答
女流氓

最簡(jiǎn)單的方法當(dāng)然是用 ES6 Promise 的 then 來(lái)執(zhí)行了,當(dāng)然如果用 ES2017 的 async/await 語(yǔ)法更帥。假設(shè)每個(gè) ajax 調(diào)用都被封裝成一個(gè)函數(shù),ajax1(), ajax2() ... 這樣

比如 ajax1 可以封裝成

function ajax1() {
    const deffered = $.Deffered();
    $.ajax(....)
        .done(data => {
            dealWith(data);
            deferred.resolve(data)
        })
        .fail(() => deferred.reject());
    return deffered.promise();
}

jQuery 的 Ajax 或 Deferred/Promise 本來(lái)就是一個(gè) thenable,所以可以

ajax1()

.then(ajax2)
.then(ajax3)
.then(ajax4);

用 async/await 語(yǔ)法可以這樣寫(xiě)

async function doIt() {
    await ajax1();
    await ajax2();
    await ajax3();
    await ajax4();
}
2017年11月20日 15:54
編輯回答
短嘆

最簡(jiǎn)單的方法是修改ajax的屬性,把默認(rèn)的異步改成同步

2017年11月30日 21:34
編輯回答
涼薄
$('.txturl button').click(function () {
    var count = 0
    $.when($.ajax({
        type: "get",
        url: "http://www.webossgoo3.com/google/CheckContent",
        async: true,
        success: function (data) {
            var pardata = JSON.parse(data)
            $('.gdt').addClass('layui-anim layui-anim-rotate layui-anim-loop');
            $('.coun-jc').hide();
            $('.txt-bet li').removeClass('active')
            $('.txtnum section span.load-jc').css('display', 'table-cell');
            if (pardata.title) {
                $('.cont2 i').html('&#x1006;')
                $('.cont2 i').css('color', 'red')
                for (j in pardata.title) {
                    $('.contentul ul').eq(0).append(
                        "<li>" + j + ":" + pardata.title[j] + "</li>"
                    )
                }
            };
            for (k in pardata.keywords) {
                $('.contentul ul').eq(1).append(
                    "<li>" + k + ":" + pardata.keywords[k] + "</li>"
                )
            }
            if (!pardata.original) {
                $('.cont1 i').html('&#x1006;');
                $('.cont1 i').css('color', 'red')
            }
            var i = 0;
            setInterval(function () {
                if (i <= $('.basetxt table i').size() - 1) {
                    $('.basetxt table i').eq(i).show()
                    i++
                } else {
                    $('.txt-bet li').eq(0).addClass('active')
                    return false
                }
            }, 500)
        },
        error: function () {
            layer.msg('檢測(cè)失敗1')
        }
    })).done(function () {
        return $.ajax({
            type: "get",
            url: "http://www.webossgoo3.com/google/checkSearch",
            async: true,
            success: function (data) {
                var pardata = JSON.parse(data)
                if (pardata.google) {
                    $('.cont3 i').html('&#x1006;')
                    $('.cont3 i').css('color', 'red')
                }
                if (pardata.bing) {
                    $('.cont4 i').html('&#x1006;')
                    $('.cont4 i').css('color', 'red')
                }
                if (pardata.yahoo) {
                    $('.cont5 i').html('&#x1006;')
                    $('.cont5 i').css('color', 'red')
                }
                if (pardata.title_top1) {
                    $('.cont6 i').html('&#x1006;')
                    $('.cont7 i').css('color', 'red')
                }
                var a = 0;
                setInterval(function () {
                    if (a <= $('.seartxt  table i').length - 1) {
                        $('.seartxt table i').eq(a).show()
                        a++
                    } else {
                        $('.txt-bet li').eq(1).addClass('active')
                        return false
                    }
                }, 500)
            },
            error: function () {
                layer.msg('檢測(cè)失敗2')
            }
        })

    }).done(function () {
        return $.ajax({
            type: "get",
            url: "http://www.webossgoo3.com/google/CheckSearch",
            async: true,
            success: function (data) {
                var pardata = JSON.parse(data)
                var i = 0;
                setInterval(function () {
                    if (i <= $('.seotxt  table i').length - 1) {
                        $('.seotxt  table i').eq(i).show()
                        i++
                    } else {
                        $('.txt-bet li').eq(2).addClass('active')
                        return false
                    }
                }, 500)
            },
            error: function () {
                layer.msg('檢測(cè)失敗3')
            }
        })
    }).done(function () {
        return $.ajax({
            type: "get",
            url: "http://www.webossgoo3.com/google/CheckContent",
            async: true,
            success: function (data) {
                var pardata = JSON.parse(data)
                var i = 0;
                setInterval(function () {
                    if (i <= $('.basetxt table i').length - 1) {
                        $('.opttxt table i').eq(i).show()
                        i++
                    } else {
                        $('.txt-bet li').eq(3).addClass('active')
                        $('.gdt').removeClass('layui-anim layui-anim-rotate layui-anim-loop');
                        $('.coun-jc').show()
                        $('.coun-jc').text('88')
                        $('.txtnum section span.load-jc').css('display', 'none');
                        return false
                    }
                }, 500)
            },
            error: function () {
                layer.msg('檢測(cè)失敗4')
            }
        })
    })
})
2017年8月29日 17:50