jQuery:通过ajax返回迭代

时间:2015-08-03 01:25:13

标签: php jquery arrays ajax object

jQuery很新,不完全理解对象和数组之间的差异,所以如果我的术语不正确,我会道歉 - 请纠正我!

我有一个来自PHP的成功的ajax返回数组:

$.ajax({
    url: "......",
    dataType: "json",
    type: "GET",
    data: {
        start_date: start,
        end_date: end
    },
    success: function (res) {
        $.each(res, function( key, value ){
            $('#FoundEvents').append('<option value="'+ key +'">'+ value +'</option>');
        });
    }
});

这给了我每个选项标签中的[object Object]。要问明显,我正在处理一个不是数组的对象?所有数据都存在,我只是找不到正确的语法来访问它。如何从这一点迭代数组数据?

如果我理解我的控制台读数正确,那么每个对象内部有10个“对象”是几个“键:值”。

感谢您的帮助!

更新

PHP Array的结构如下: $ arr = array(1 =&gt; array(key =&gt; value),2 =&gt; array(key =&gt; value)...)

我正在尝试访问值。

更新2

这是我的新代码:

 $.each(res, function(index, item){
    $.each(item, function(key, value){
        if(key == "event_title")
        {
            Events.push({"event_title":value});
        }
    });
});
$.each(Events, function(index, value){
    $('#FoundEvents').append('<option value="'+ index +'">'+ Events.value +'</option>');
});

但不知怎的,我的数组中还有对象?我不明白为什么。我认为'价值'本身就是对象......我不介意,但需要知道如何把数据拿出来。

3 个答案:

答案 0 :(得分:0)

plenty places有助于解释数组和对象之间的区别。简而言之,在JavaScript中,Array是Object的类型。它继承了Object的所有属性,但具有其他属性和方法,例如数字索引和推送/弹出。

当你在控制台中说有10个对象时,你是指成功处理程序中res的内容吗?听起来你可能为res中的每个元素都有一个嵌套的Object。在不知道返回的JSON数据是如何构造的情况下,诊断问题有点棘手。

您可以在处理程序中发布执行console.log(res);的输出吗?

<强>更新

啊,所以你确实有嵌套的对象作为响应。您可能需要像这样重构PHP数组:

$arr = array(1 => array(key=>"something", value=>"something's value"), 2 => array(key=>"something else", value=>"something else's value") ...)

然后,在您的成功处理程序的每个函数中,您可以执行以下操作:

$.each(res, function( index, item ){
  var key = item.key,
      val = item.value;

  $('#FoundEvents').append('<option value="'+ key +'">'+ value +'</option>');
});

更新2

如果你真的无法改变PHP发送响应的方式,你可能需要做这样的事情。但是,如上所述,这似乎有点过分,因为res数组中的对象只会有一个键/值对。

$(document).ready(function () {
    $.each(res, function(index, item) {
      $.each(item, function(key, value) {
        // do something with key and value
      });
    });
});

答案 1 :(得分:0)

您正在迭代的数据可能包含key字段,但jQuery不会为您解压缩。这就是您获取[object Object]文本而不是实际值的原因。在将数据返回到网页之前,您应该像这样转换数据:

[{'key1': 'val1'}, {'key2': 'val2'}]

{'key1': 'val1', 'key2': 'val2'}

但是如果你关心秩序(对象遍历顺序是任意的),你可以这样做:

[{key: 'key1', value: 'val1'}, {key: 'key2', value: 'val2'}]

然后在数组中访问这样的数据:

 $('#FoundEvents').append('<option value="'+ obj.key +'">'+ obj.value +'</option>');

答案 2 :(得分:0)

你快到了。回调函数中的第二个参数是数组或对象,第一个是对象属性的数组索引。您必须使用index / property来获取值。

尝试以下方法:

success: function (res) {
    $.each(res, function( key, value ){
        $('#FoundEvents').append('<option value="'+ key +'">'+ value[key] +'</option>');
    });
}

记下我的更改,即选项标签中的文字。

您也可以考虑将对象注销到控制台,以便检查结构,如下所示:

success: function (res) {
    $.each(res, function( key, value ){
        //The output can be found in developer console which is found in any modern browser.
        console.log(value);
        $('#FoundEvents').append('<option value="'+ key +'">'+ value[key] +'</option>');
    });
}