我知道有100万个问题,但我似乎无法找到答案。
我正在通过PHP接收数据
echo json_encode($result);
来自典型的MYSQL查询。
我在控制台中得到了这样的结果。
[{"id" : "1", "name" : "bob"}]
我正在尝试使用$ .each来迭代这个,所以我可以处理我的结果,但我只得到错误,未定义或0 [对象] ......这样的事情。
我的目标是将每个值附加到输入框(从表中检索数据以放入编辑框)。
$.post('getstuff.php', { id : id } function(data){
$.each(data), function(k,v){
$('input[name= k ]').val(v);
});
});
正如你所看到的,我希望它像key =>值对一样简单,但显然不是。我试过解析,stringifiying ..我真的迷失了。我也无法告诉$ .post我正在使用JSON,因为我使用的是一个更随意的函数,但我只是将它作为我的例子发布。
修改
var retrievedData = JSON.parse(data);
$.each(retrievedData, function(k,v){
for (var property in retrievedData) {
if (retrievedData.hasOwnProperty(property)) {
console.log(k);
console.log(v);
console.log(property);
//$('input[name= k ]').val(v);
}
}
});
答案 0 :(得分:2)
在你的第二个代码示例中,retrievedData
是一个数组,你可以使用jQuery $每个迭代...
$.each(retrievedData, function(k, v) {
好到目前为止。但是,然后你尝试再次像对象一样迭代retrievedData
,而不是。这就是您在控制台中获取未定义消息的原因
for (var property in retrievedData) {
if (retrievedData.hasOwnProperty(property)) {
console.log(k);
console.log(v);
console.log(property);
//$('input[name= k ]').val(v);
}
}
在内循环上,你应该迭代v
而不是retrievedData
。每次传递$ v
将成为一个对象。试试这个:
$.each(retrievedData, function(k,v){
for (var key in v) {
if (v.hasOwnProperty(key)) {
console.log("key: " + key);
console.log("value: " + v[key]);
}
}
});
你应该先做一些类型检查v是一个对象并捕获任何错误。
答案 1 :(得分:1)
使用:
$.ajax({
'dataType' : 'json'
});
或者
$.getJSON
或者如果您想使用$ .post,只需在您的成功函数中执行:
var good_data = JSON.parse(data);
$.each(good_data, function(k,v) {
$('input[name= k ]').val(v);
});
答案 2 :(得分:1)
首先,您需要在POST请求中定义您期望的JSON - http://api.jquery.com/jQuery.post/
然后你需要遍历响应。
$.post('getstuff.php', { id : id } function(data){
//Assuming you get your response as [{"id" : "1", "name" : "bob"}], this is an array
//you need to iterate through it and get the object and then access the attributes in there
$.each(data), function(item){
$('input[name=' + item.name + ']').val(item.id);
});
}, 'json');
编辑
如果要迭代返回的对象的属性,则需要在$.each
for (var property in item) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
更多相关信息 - Iterate through object properties
编辑2
解决您发布的解决方案。您使用了错误的变量名称。这是一个工作小提琴 - http://jsfiddle.net/EYsA5/
var $log = $('#log');
var data = '[{"id" : "1", "name" : "bob"}]'; //because we're parsing it in the next step
var retrievedData = JSON.parse(data);
for (var parentProp in retrievedData) { //this gets us each object in the array passed to us
if (retrievedData.hasOwnProperty(parentProp)) {
var item = retrievedData[parentProp];
for (var property in item) { //this gives us each property in each object
if (item.hasOwnProperty(property)) {
console.log(item[property]);
$log.prepend("<br>");
$log.prepend("Property name is - " + property);
$log.prepend("<br>");
$log.prepend("Value of property is - " + item[property]);
//do stuff
}
}
}
};
答案 3 :(得分:1)
根据您对其他答案的评论回答您的问题。 我的假设是你将数据作为JSON获取,如果不是你需要解析它,因为你可以使用JSON.parse(string)。
我在这里使用Underscore.js
var data=[{"id" : "1", "name" : "bob"}]
$(data).each(function(ind,obj){
var keys=_.keys(obj);
$(keys).each(function(i,ke){
console.log(ke)
console.log(obj[ke]);
})
});
Here is JSFiddle工作代码