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)...)
我正在尝试访问值。
这是我的新代码:
$.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>');
});
但不知怎的,我的数组中还有对象?我不明白为什么。我认为'价值'本身就是对象......我不介意,但需要知道如何把数据拿出来。
答案 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>');
});
}