【问题标题】:Ajax JSON Array - accessing the informationAjax JSON 数组 - 访问信息
【发布时间】:2014-07-08 16:51:14
【问题描述】:

我有以下代码:

$.getJSON('../_javascripts/array.php')
    .success(function(response) { console.info(response); alert("success"); })
    .fail(function(jqXHR, status, error){ console.info(error); alert("error"); });

在控制台中显示输出,但是,我正在尝试访问该信息(显示在控制台中 - 它是一个数组)并且似乎无法访问。

控制台输出

Object {P5yTZ947: Array[3], 11y6tdo8: Array[3], 66j8ttk2: Array[3], 27c7uqv0: Array[3], 44f6hvt7: Array[3]…}

我尝试了以下方法:

alert(response);
alert(response[0]);
var array = response;

所有这些都带回undefined

很明显我做错了什么,但不能完全理解是什么。欢迎任何建议、反馈和 cmets。

【问题讨论】:

  • 你能告诉我们它在控制台中显示的内容吗?
  • 您在哪里尝试这些警报语句?
  • 而不是console.info(response)functionThatNeedsTheData(response) 并在函数内部处理/访问它。
  • 你试过console.log然后只是在控制台中玩弄它吗?
  • 更新了控制台输出。我尝试在 $.getJSON 内外使用这些选项。

标签: javascript jquery ajax arrays json


【解决方案1】:

很难回答您,因为我们无权访问您的 array.php 文件。尝试使用以下代码调试response 输出(您需要打开开发者控制台):

$.getJSON('../_javascripts/array.php', function( data ) {
    $.each( data, function( key, value ) {
        console.log( key );
        for( var i in value ) {
            console.log( "  " + JSON.stringify(value[i]) );
        }
    });
});

尝试在 Google Chrome 控制台中使用断点来检查 data(Ajax 响应)变量内容。

【讨论】:

    【解决方案2】:

    从控制台输出来看,array.php 返回的是一个包含数组的对象。

    【讨论】:

    • 可能是这样 - 知道为什么吗?
    • 如果你在 php 中有一个关联数组或 STD 对象,然后调用 json_encode() 那么它很可能会创建你在那里看到的内容
    【解决方案3】:

    您对响应的处理必须来自给$.getJSON();的回调函数

    即成功的情况下响应对象的作用域只在成功函数内。把你的成功处理代码放在那里(或从那里调用它),你应该很高兴。

    例如:

    function doSomethingWithSuccessResponse( response ){
      console.log( response );
    
      // Execute the rest of your success case logic here
    }
    
    $.getJSON('../_javascripts/array.php')
        .success(function(response) { doSomethingWithSuccessResponse(response); })
        .fail(function(jqXHR, status, error){ console.info(error); alert("error"); });
    

    或者,更简洁:

    function doSomethingWithSuccessResponse( response ){
      console.log( response );
    
      // Execute the rest of your success case logic here
    }
    
    $.getJSON('../_javascripts/array.php')
        .success(doSomethingWithSuccessResponse)
        .fail(function(jqXHR, status, error){ console.info(error); alert("error"); });
    

    同样适用于失败案例 - 在失败回调中执行你的失败处理逻辑。

    看起来您的 API 正在返回一个带有嵌入式数组的对象:

    Object {
      P5yTZ947: Array[3], 
      11y6tdo8: Array[3], 
      66j8ttk2: Array[3], 
      27c7uqv0: Array[3], 
      44f6hvt7: Array[3]…
    }
    

    使用object-looping semantics 遍历对象。然后使用内部循环遍历数组的元素:

    for (var key in response) {
       if (response.hasOwnProperty(key)) {
          // key is now "P5yTZ947" or "11y6tdo8", etc
          var innerArray = response[key];
    
          // Loop over the values of the inner array
          for( var i = 0; i < innerArray.length; i++ ){
            console.log( innerArray[i] );  // 
          }
       }
    }
    

    【讨论】:

    • 这能让我遍历数组吗?
    • 应该,是的。看起来您的 API 正在返回一个对象(或字典/哈希,如果您更熟悉的话)。在 Javascript 中遍历哈希的属性与遍历数组有点不同。
    • 对于一个对象,像这样迭代:for (var key in response) { if (response.hasOwnProperty(key)) { console.log(key, response[key]); } }stackoverflow.com/a/14379304/13264
    • @Homer_J 在答案中添加了循环逻辑,并提供了更多解释。
    猜你喜欢
    • 2018-11-13
    • 2013-06-05
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多