0

大家早上好。

尝试使用从 php 获取的数组时,我仍然遇到一些问题。问题是当我得到一个数组时,我不能在“成功函数”之外使用它。所以这就是正在发生的事情。

我创建了一个名为“langs”的变量来保存数组的信息:

var langs=[];

然后,当我使用 console.log 打印数组的信息 INSIDE 函数成功时,我的代码如下所示:

$.ajax({
      type: 'POST',
      url: '/ws/languagesForJs',
      dataType: 'json',
      success: function(result) {
            langs=result;
            console.log(result)         
      },
  });

效果很好!!我可以看到数组的信息。它看起来像这样:

Object {es: Object, en: Object}
 en: Object
       lang_ext_name: "en_US"
       lang_id: 2
       lang_iso: "en"
       lang_name: "Inglés"
       lang_url: "en"
      __proto__: Object
 es: Object
       lang_ext_name: "es_PE"
       lang_id: 1
       lang_iso: "es"
       lang_name: "Español"
       lang_url: "es"
 __proto__: Object
 __proto__: Object

但是,当我使用 console.log 打印数组的信息时,OUTSIDE 函数成功:

$.ajax({
      type: 'POST',
      url: '/ws/languagesForJs',
      dataType: 'json',
      success: function(result) {
            langs=result;

      },
  });
            console.log(result)

它只返回;

[]

真诚地,我不知道为什么会这样。也许我错过了一些功能的理论或其他东西。我在网上查找了信息;但是,似乎没有人需要成功函数之外的数组。我没有找到任何关于它的信息。

我希望有一个人可以帮助我。谢谢

顺便说一句:对不起我的英语不好。这不是我的母语。

4

2 回答 2

3

这里有2个问题。

  1. 结果是成功回调的本地结果。您可以访问回调之外的语言,因为它似乎不是全局范围的。
  2. 回调异步发生。这可能会导致 console.log 调用在成功回调之前发生。查看 jQuery ajax 承诺对象http://api.jquery.com/jQuery.ajax/可能是值得的。
于 2013-07-09T15:35:16.597 回答
1

result是一个局部变量,你需要在你的ajax调用之外创建一个引用,这样你就可以毫无问题地引用它。

尝试这个:

var myResult;
$.ajax({
  type: 'POST',
  url: '/ws/languagesForJs',
  dataType: 'json'})
  .done(function(result) {
     myResult = result; // save a reference
     langs = result;
  })
  .always(function() {
    console.log(myResult);
  });

我还应该提到它success已被弃用,您应该done改用它。always回调被调用的名称总是如此,因此您可以将异步调用完成时需要执行的代码放在那里。

希望能帮助到你。

于 2013-07-09T15:29:29.170 回答