zoukankan      html  css  js  c++  java
  • ajax嵌套ajax

    最近在做项目的时候,需要用到两个接口,B接口的请求数据需要用到A接口sucess成功之后返回的数据:就像这样:A>{B}。但是老是报错,得不到想要的东西。上网上查找了一下资料,得到的原因是因为Ajax是异步的,B请求的时候A的success之后的数据可能并没有得到,所以呢,就导致程序运行不下去。

    为了发扬程序远的精神,开始百度谷歌,网上解决方法比较多的就是这个:async: false

    我把程序改成同步,哎,等着你得到数据,我再走,这样就解决啦。但是我感觉这个方法贼蠢,先不说导致页面卡死的问题,没法加载下面的js代码。哎,就感觉很low,没逼格,哈哈!

    那么我转念一想,都是异步改同步的思路,那么A>{settimeout(function(){B},0)},我把B利用定时器,放到任务队列中,那么只有当主队列,也就是A所在的队列执行完后,B接着执行,问题也是可以解决的,这样呢,最起码页面不会锁死,以为自己很帅,问题解决。这就是我自己想出来的第二个方法。

    为什么说问题解决而不是完美解决呢?因为有很多大神会喷我乱用settimeout,我想起来了前两天写的es6中的promise···好像也可以解决

    于是>>

    A{

      var promise = new Promise(function(reslove,reject){

         if(sucess){

          reslove(data)   //data是sucesss之后得到的数据

        }else{

          reject(err)

        }

      })

      return promise

    }

    调用呢,就这样:A.then(function(data){B(data)}).catch(function(){})

    这个方法,es6新知识,如果在用es3的小伙伴可以上网上找类似插件

    总结:这个东西是我由第一个方法联想到的其他两个方法,promise,同步异步,js单线程,这些细节网上都有。

  • 相关阅读:
    UVa 10474
    UVa 1339
    UVa 1368
    UVa 1585
    UVa 1586
    ACM中Java高效输入输出封装
    Ajax中Get请求与Post请求的区别
    AJAX——核心XMLHttpRequest对象
    PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
    PHP类方法重写原则
  • 原文地址:https://www.cnblogs.com/qdphr/p/6963006.html
Copyright © 2011-2022 走看看