在使用$ .each方法检索JSON数组数据时,我能够获取数组值,但除此之外,它还显示了NaN'值并显示以下错误。
"未捕获的TypeError:无法在'中使用'运营商搜索' 5'你好!"
似乎它循环遍历所有对象而不仅仅是数组,如果是这种情况,我怎样才能获得数组值以及如何获取所有值(包括和排除数组值)。
此 rawgit 的另一个查询仅适用于方法&#39; GET &#39;,因为使用方法&#39; POST < / EM>&#39;投掷错误(403(禁止))。
this.itemRecordBindingSource.Filter = string.Format("date >= '{0:yyyy-MM-dd}' AND date < '{1:yyyy-MM-dd}'", date, plus);
JSON:
$.ajax({
method: 'GET',
url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
dataType: 'json',
success: function (data) {
$.each(data, function(index, obj){
$.each(obj, function(index, element) {
$('#show-data').append(element.key + element.value + '<br/>');
});
});
}
});
答案 0 :(得分:1)
听起来你只想迭代data.items
,但你要迭代一切。试试这个:
$.each(data.items, function(index, obj) {
$('#show-data').append(obj.key + obj.value + '<br/>');
});
答案 1 :(得分:1)
问题是当第二个循环到达"message": "Hello!"
时,这不是再次循环的对象,因此对于该元素,只需要第一个循环。
要更正,只有在obj
是对象的情况下才输入if语句才能进入第二个循环
我还将嵌套循环index
名称更改为index2
。
$.each(data, function(index, obj){
// Only do nested loop if obj is Object
if (obj instanceof Object) {
$.each(obj, function(index2, element) {
$('#show-data').append(element.key + element.value + '<br/>');
});
}
});
如果您只对data.items感兴趣,那么您可以使用
$.each(data.items, function(index2, element) {
$('#show-data').append(element.key + element.value + '<br/>');
});
答案 2 :(得分:1)
你有一个不必要的for循环。响应是您的案例中的一个JSON对象。您只需要迭代数据项。更新:您如何处理响应取决于您想要完成的任务。在实践中,您通常知道如何从响应中访问所需的数据,但正如其他人所建议的那样,您可以遍历响应对象中的键并检查类型
var object = {
arr : [1,2,3],
nestedObject : { }
};
for (var key in object) {
console.log(key);
console.log('Is array? ' + Array.isArray(object[key]));
// Now you can handle the data based on it's type...
}
&#13;
在这种情况下,您可以选择期望响应包含items
密钥并对其进行迭代。 (验证您可以处理响应也是一种很好的做法)
$.ajax({
method: 'GET',
url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
dataType: 'json',
success: function(data) {
// data is your JSON object.
data.items.forEach(function(item) {
$('#show-data').append(item.key + item.value + '<br/>');
});
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="show-data"></div>
&#13;
此外,403表示为当前用户阻止了资源。验证您的POST方法是否可公开访问,以及您是否有权发出请求。
答案 3 :(得分:0)
你应该首先解析json。正如@Jason P所说,迭代data.items
$.ajax({
method: 'GET',
url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
dataType: 'json',
success: function (data) {
var parsedData = $.parseJSON(data);
$.each(parsedData.items, function(index, obj){
$.each(obj, function(index, element) {
$('#show-data').append(element.key + element.value + '<br/>');
});
});
}
});
答案 4 :(得分:0)
您正在循环遍历数组中的所有元素。我认为你只需要遍历&#39;项目&#39; element仅作为该元素包含&#39;键&#39;和&#39;价值&#39;元件。
即使您这样做,也可以检查key和value元素是否存在,如果存在,请执行您的代码所需的任何内容。
$.ajax({
method: 'GET',
url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
dataType: 'json',
success: function (data)
{
$.each(data, function(index, obj)
{
$.each(obj, function(index, element)
{
if(element.hasProperty('key') && element.hasProperty('value'))
$('#show-data').append(element.key + element.value + '<br/>');
});
});
}
});
答案 5 :(得分:0)
$.ajax({
method: 'GET',
url: 'https://rawgit.com/rajeshdesigner/testgit/master/colorsdata.json',
dataType: 'json',
success: function (data) {
console.log(data.items);
$.each(data.items, function(index, element) {
$('#show-data').append(element.key + element.value + '<br/>');
});
}
});