javascript - jQuery AJAX 范围的问题

标签 javascript jquery

我在尝试从 success 回调中修改全局变量时遇到了 jQuery 问题:

<html>
<head>
<script type="text/javascript" src="javascript/jquery.min.js"></script>
<script type="text/javascript">

  // Define items in the global scope
  items = null;

  // Get items from XML for a given category ID
  function getItems(categoryID)
  {
    $.ajax({
      type: 'GET',
      url: 'items.xml',
      dataType: 'xml',
      success: function(xml){
        items = $(xml).find('category[id="'+categoryID+'"]').children().first();
        // This works (returns the name of the first item)
        alert( items.attr('name') );
      }
    });
  }
</script>
</head>

<body>
<script type="text/javascript">
  $(function(){
    getItems(1);

    // This doesn't work (returns null)
    alert( items.attr('name') );
  });
</script>
</body>

</html>

我做错了什么?

最佳答案

这是因为在您执行警报时回调尚未完成。

Get 请求是异步的,因此即使尚未完成,也会继续执行。所以当alert()语句执行时,success回调还没有执行,所以items还是null。

您可以执行同步调用,也可以在成功回调中包含您尝试执行的任何操作。

关于javascript - jQuery AJAX 范围的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085541/

相关文章:

javascript - 每 5 秒在浏览器中使用不同参数打开链接

用于在 HTML 表格行之间添加行的 Jquery 语法

javascript - div 在 <option> 标签或替代?

javascript - Node.js http.get 作为函数

javascript - 如何使用 if else 与 Protractor

javascript - 使用搜索功能访问 json

javascript - 将 Excel 数据导出到嵌套 JSON

javascript - anchor 标签和 scrollTo 在移动浏览器上什么都不做

javascript - React 不渲染新组件,新的 webpack 设置

javascript - Jira 问题收集器代码在嵌入 html 中时有效,但在单独的 javascript 文件中无效