使用jquery ajax从php获取处理数组的问题

时间:2013-07-09 15:27:21

标签: arrays json function jquery

每个人都是Goog早上好。

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

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

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)

只返回;

[]

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

我希望有人可以帮助我。感谢

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

2 个答案:

答案 0 :(得分:3)

这里有两个问题。

  1. 结果是成功回调的本地。您可以访问回调之外的lang,因为它似乎不是全局范围的。
  2. 回调是异步发生的。这可能会导致console.log调用在成功回调之前发生。查看jQuery ajax promise对象http://api.jquery.com/jQuery.ajax/
  3. 可能是值得的

答案 1 :(得分: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已被弃用,您应该转而使用donealways回调被称为名称为始终,因此您可以放置​​异步调用完成时需要执行的代码。

希望它有所帮助。