使用jqueryajax的JavaScript作用域

使用jqueryajax的JavaScript作用域,javascript,jquery,html,Javascript,Jquery,Html,在这种情况下,我希望有一个全局变量,比如a,我将从某个服务器的jQueryAjax中获取它的值,然后希望该值可以从其他函数调用时使用。要可视化: var a = []; $(document).ready(function () { $.ajax({ type: 'GET', url: 'some url', success: function (response) { a = response.somearray; }, error:

在这种情况下,我希望有一个全局变量,比如a,我将从某个服务器的jQueryAjax中获取它的值,然后希望该值可以从其他函数调用时使用。要可视化:

var a = [];

$(document).ready(function () {
  $.ajax({
    type: 'GET',
    url: 'some url',
    success: function (response) {
      a = response.somearray;
    },
    error: function () {
      alert("Not successfull");
    }
  });
});

function something() { // this function will be called onclick of a button in html
  console.log(a); // here I want the value that came from the server. But currently, it's printing empty array
}
我试过的方法如下:

  • 从(a)中删除var关键字以使其全局化
  • 在上面的(a)声明中没有赋值(这里是空数组)(但结果是一个错误)
  • 从顶部完全移除(a)声明

  • 需要注意的是,在完成页面加载和ajax调用之后,从HTML按钮调用something()函数。所以值已经可用。

    范围丢失,因为ajax回调是异步函数。我想应该是

    var a = [];
    
    $(document).ready(function () {
      var me = this;
      $.ajax({
        type: 'GET',
        url: 'some url',
        success: function (response) {
          me.a = response.somearray;
        },
        error: function () {
          alert("Not successfull");
        });
    });
    

    下面是您想要的工作示例,请检查控制台日志:


    编辑:

    HTML:

    你好
    看起来不错,在大多数情况下,您遇到了什么问题?我遇到的问题是它打印的是空数组。只要用户在响应返回后单击按钮(这很可能是因为服务器延迟),它就不应该是空的。这是你正在使用的实际代码吗?顺便问一下,你有一个括号不匹配,你检查过js错误吗?这是一个演示代码@antoni,所以括号不匹配不是我感兴趣的东西。服务器的响应已经填充了somearray,因此我对功能而不是语法感兴趣。OP的代码没有
    这个
    问题。他的
    something()
    只被称为onclick。他不希望自动调用它。(即使是这样,这个实现基本上与OP的当前代码没有什么不同-它不会解决他遇到的任何问题)OP在ajax调用后说调用为什么不发布自己的答案而不是批评其他响应,如果在ajax调用后没有,您的响应也不会解决它,当点击按钮时-请参见
    ,点击html中的按钮时,此函数将被调用,因为OP的问题无法重现,因为他发布了代码-他没有发布真正的代码,因此无法确定到底出了什么问题
    
    var a = [];
    
    $(document).ready(function () {
      $.getJSON("https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
        tags: "snowboarding",
        tagmode: "any",
        format: "json"
      })
      .done(function (response) {
        a = response.items;
        // something(); Don't need this.
      });
    });
    
    function something() { // this function will be called onclick of a button in html
      console.log(a); // here I want the value that came from the server. But currently, it's printing empty array
    }
    
    <button onclick="something()">hello</button>