javascript - 在ajax回调函数之外使用变量

标签 javascript jquery ajax

在回调函数之外使用全局变量的最佳方式是什么?

    var icon; 
    $(function(){

      $.get('data.xml', function(xml){

           icon = xml.documentElement.getElementsByTagName("icon");
           //this outputs a value
           console.log(icon);
       });
       //this is null
       //How can this maintain the value set above?
       console.log(icon);
    });

最佳答案

您提供的代码完全有效 - 事实上,icon 确实“维持”了它的值(value)。问题很可能是 get() 异步运行 - 仅在 'data.xml' 完全加载后调用匿名函数从服务器。所以现实世界的执行顺序看起来像这样:

  1. 调用 get('data.xml', function(xml){...}) (开始加载 data.xml)
  2. 调用 console.log(icon) (此时 icon 仍为 null)
  3. (data.xml 已完成加载)现在调用匿名函数,该函数将值分配给 icon:icon = xml.documentElement.getElementsByTagName("icon") .

如果您想对 icon 的值执行某些操作,获取“data.xml”后,那么您需要执行此操作>在匿名回调函数内。像这样:

var icon; 
$(function(){

  $.get('data.xml', function(xml){
       icon = xml.documentElement.getElementsByTagName("icon");
       console.log(icon);
   });
});

祝你好运!

<小时/>

注意:您仍然可以在匿名函数外部的代码中使用icon,但您需要等待之后 匿名函数已运行。执行此操作的最佳方法是将依赖代码放入其自己的函数中,然后从回调函数中调用该函数:

var icon; 
$(function(){

  $.get('data.xml', function(xml){
       icon = xml.documentElement.getElementsByTagName("icon");
       loadIcon();
   });

   function loadIcon() {
       console.log(icon);
       // ... do whatever you need to do with icon here
   }
});

关于javascript - 在ajax回调函数之外使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307819/

相关文章:

javascript - 拆分方法然后连接

javascript - 如何通过 Web-Workers 传递自定义类实例?

jquery - Bootstrap使用Jquery和ajax切换切换功能

javascript - 替代元素的加载

javascript - 如何在 Google maps v3 API 上异步添加标记?

javascript - a href 在 bootstrap 3.0 上不起作用

javascript - 通过使用 Safari 更改 window.location 下载文件

jquery - 需要具有预测搜索功能的良好 jquery 多选插件

Python 服务器端 AJAX 库?

javascript - 解析器错误语法错误: Unexpected number in JSON