liaa
V2EX  ›  问与答

Q: JavaScript在一个function中使用ajax请求,如何才能将ajax返回的结果作为function的返回值

  •  
  •   liaa · Dec 1, 2013 · 8999 views
    This topic created in 4731 days ago, the information mentioned may be changed or developed.
    深夜来V2讨教一个问题:

    代码如下:

    ```js
    function loadAllGists(username){
    var gists = null;
    $.ajax({
    url: 'https://api.github.com/users/'+username+'/gists'
    }).done(function(data) {
    console.log('ajax compelete');
    gists = data;
    });
    console.log('function compelete');
    return gists;
    }
    ```

    var gistsOfliaa = loadAllGists('liaa');
    这里我希望gistsOfliaa是 ajax的返回值. 但是因为ajax是异步过程,所以loadAllGists方法返回值是undefined.

    想问下如何才能达到我想要的目的.即:在一个function中使用ajax请求,如何才能将ajax返回的结果作为function的返回值
    12 replies  •  1970-01-01 08:00:00 +08:00
    binux
    binux
    Dec 1, 2013
    1
    不可以
    liaa
    liaa
    OP
    Dec 1, 2013
    2
    @binux 好像只有用callback了...
    toctan
    toctan
    Dec 1, 2013 via Android
    3
    @binux @liaa 其实是可以的,ajax 传入 async: false 只是不推荐这样做,这样 ajax call 就是 synchronous 的,会 block
    lizheming
    lizheming
    Dec 1, 2013 via iPad
    4
    改成同步可以么?
    liaa
    liaa
    OP
    Dec 1, 2013
    5
    @toctan 是的这样子只追求代码的简洁会得不偿失...
    binux
    binux
    Dec 1, 2013
    6
    @toctan ajax = Asynchronous JavaScript and XML,那就不叫ajax请求了
    虽然没法直接 var =
    但是callback也可以写得比较简单
    davepkxxx
    davepkxxx
    Dec 1, 2013
    7
    我们公司的做法是async: false
    justfly
    justfly
    Dec 1, 2013
    8
    研究了python异步网络框架tornado,js如果支持生成器(yield),就能搞定同步风格写异步代码,不 block 页面
    justfly
    justfly
    Dec 1, 2013
    9
    但是 js 不支持,所以还要回掉写
    undozen
    undozen
    Dec 1, 2013 via Android
    10
    1. HTTPXmlRequest 可以發同步請求,但請求期間瀏覽器會卡住
    2. 你看看 promise 會不會接近你想要的
    gouflv
    gouflv
    Dec 1, 2013
    11
    callback 或者 promise , 没有其他模式了, async: false一般不会推荐
    rankjie
    rankjie
    Dec 1, 2013 via iPhone
    12
    硬要这样的话。。。那就:
    node --harmony有yield(0.11版本以上就支持了似乎)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2107 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 103ms · UTC 08:56 · PVG 16:56 · LAX 00:56 · JFK 03:56
    ♥ Do have faith in what you're doing.