search

Home  >  Q&A  >  body text

javascript - jquery ajax的success中给外部定义的变量赋值,外部引用的话为空?

在ajax的外边定义了一个var imgpath=“”;
在ajax的success中给imgpath赋值成功(通过调试看到已赋值)
但在外边引用的话为“”。
网上的答案说是async设成false,但还是不行?

通过调试与输出值正常得到。

但是外部就是得不到

迷茫迷茫2822 days ago570

reply all(8)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 15:12:29

    你这样写肯定是得不到的,因为ajax是异步的,也就是后面的代码会先执行,所以为"";
    至于把ajax的async改为false,这个我也不清楚,你可以断点调试一下,在这两块地方都打上断点,看谁先执行,顺便通过调试还可以看看jQuery的ajax的工作原理。^_^

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:12:29

    如果你清楚js的执行方式和异步之间的区别,就知道为什么了。
    因为js是顺序加载的,当执行到ajax部分的时候,ajax执行的时候,ajax下面的代码是会在ajax执行的同时执行到的。

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 15:12:29

    這種問題已然成爲日經貼了

    var a = 0;
    someAsyncProcess(function callback() { a = 1; });
    console.log(a);
    // → 0
    

    實際上等價於

    var a = 0;
    var callback = function callback() { a = 1; }; // no immediate invocation here
    console.log(a);
    // → 0
    
    // ... After a period of time ...
    
    callback();
    // `a === 1` now.
    

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:12:29

    这里有说明
    如果需要发送同步请求,请将此选项设置为 false 。跨域请求和 dataType: "jsonp" 请求不支持同步操作。

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 15:12:29

    贴代码看下,应该是个语法错误而已

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:12:29

    我觉得这样写还是不太好 最好还是把处理函数写在回调里吧

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:12:29

    @Go_Geek 他的才是正解。你试试把Ajax拿到的数据用来在Ajax里调用处理这个数据的函数试试。 至于原因,貌似是闭包什么的,貌似。

    reply
    0
  • 阿神

    阿神2017-04-10 15:12:29

    jsonp是不支持sync:false的,打上去也还是异步请求。所以请求还没回来就已经开始赋值""了,赋值还是得写到success里面的。

    reply
    0
  • Cancelreply