Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery getJSON操作成功后未定义data.length_Jquery_Json_Each - Fatal编程技术网

Jquery getJSON操作成功后未定义data.length

Jquery getJSON操作成功后未定义data.length,jquery,json,each,Jquery,Json,Each,我正在用getJSON中的JSON数据填充下拉列表 填充工作正常,但试图通过与数据进行比较来确定填充已完成。长度不是数据。长度是未定义的,我不明白为什么 数据如下所示: { "1": { "id": "1", "name": "Plymouth" }, "2": { "id": "2", "name": "Torquay" } } $('.locationList').empty(); $('.lo

我正在用getJSON中的JSON数据填充下拉列表

填充工作正常,但试图通过与
数据进行比较来确定填充已完成。长度
不是
数据。长度
未定义的
,我不明白为什么

数据如下所示:

{
    "1": {
        "id": "1",
        "name": "Plymouth"
    },
    "2": {
        "id": "2",
        "name": "Torquay"
    }
}
$('.locationList').empty();
$('.locationList').append('<option value="">Select...</option>');
$.getJSON('/Settings/locations.txt', function (data) {
    var dataNum = data.length;
    var counter = 1;
    $.each(data, function (i, item) {
        $('.locationList').append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
        if (counter >= dataNum) {
            $('#bookTo').val(locationID + 1);
            $('#transferFrom').val(locationID);
        };
        counter++;
    });
});
我的代码如下所示:

{
    "1": {
        "id": "1",
        "name": "Plymouth"
    },
    "2": {
        "id": "2",
        "name": "Torquay"
    }
}
$('.locationList').empty();
$('.locationList').append('<option value="">Select...</option>');
$.getJSON('/Settings/locations.txt', function (data) {
    var dataNum = data.length;
    var counter = 1;
    $.each(data, function (i, item) {
        $('.locationList').append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
        if (counter >= dataNum) {
            $('#bookTo').val(locationID + 1);
            $('#transferFrom').val(locationID);
        };
        counter++;
    });
});
允许我在
$完成后预设下拉框的值。每个
循环都已完成(这适用于其他列表),但不会发生

当我运行
警报(data.length)
时,我得到了
未定义的
,这毫无意义,因为
数据
显然有一个
长度
,以便它通过
$正确填充下拉框。每个
,它都有

编辑:抱歉,应该添加,变量
locationID
在脚本前面从Cookie声明,并且是有效的

您的JSON:

{"1":{"id":"1","name":"Plymouth"},"2":{"id":"2","name":"Torquay"}}
是一个对象,而不是数组,因此未定义
length
属性。 如果要将其解析为数组,服务器需要给出如下响应:

{"response": [{"1":{"id":"1","name":"Plymouth"}},
{"2":{"id":"2","name":"Torquay"}}] }
[]
代替
{}

这是一个对象:

data = {
    "1": {
        "id": "1",
        "name": "Plymouth"
    },
    "2": {
        "id": "2",
        "name": "Torquay"
    }
}
而且它没有
length
属性

请参见:仅属性
1
2

是否确实要将其作为对象评级器,然后作为数组:

data = [
    {
        "id": "1",
        "name": "Plymouth"
    },
    {
        "id": "2",
        "name": "Torquay"
    }
]
然后就有了
length
属性和许多其他本机数组方法,如
sort
。您可以通过以下方式访问数据:

data[0]
这等于:

{
    "id": "1",
    "name": "Plymouth"
}

也许这不是最好的方法,但像这样的东西可能是一个快速修复

$('.locationList').empty();
$('.locationList').append('<option value="">Select...</option>');
$.getJSON('/Settings/locations.txt', function (data) {
    var dataNum = 0;
    for (i in data) {if (data.hasOwnProperty(i)) {dataNum++;}}    
    var counter = 1;
    $.each(data, function (i, item) {
        $('.locationList').append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
        if (counter >= dataNum) {
            $('#bookTo').val(locationID + 1);
            $('#transferFrom').val(locationID);
        };
        counter++;
    });
});
$('.locationList').empty();
$('.locationList').append('Select…');
$.getJSON('/Settings/locations.txt',函数(数据){
var-dataNum=0;
对于(数据中的i){if(data.hasOwnProperty(i)){dataNum++;}
var计数器=1;
$。每个(数据、功能(i、项){
$('.locationList').append(''+data[i].name+'');
如果(计数器>=dataNum){
$('#bookTo').val(locationID+1);
$('#transferFrom').val(locationID);
};
计数器++;
});
});
当response.data=[]时, 这项工作:

if (response.data.length === 0)

这是一个长度优先的数组。

数据的可能重复项是一个对象,而不是字符串或数组。对象不公开
length
属性。当您有jQuery的.each()函数的索引值时,为什么需要
dataNum
变量?我需要dataNum变量来确定
$的时间。每个
都已完成,因为不管文档中怎么说,否则,下拉框的值选择会在完全填充之前发生不正确!数组不采用json:
{string:value,string:value}
这样的字符串。数组是:
[value,value]
不正确,否则函数的其余部分肯定会失败?啊。。。阅读@AndreasAl answer为我指明了正确的方向,并附上了这条评论。。。某种程度上!是的,我确实这么认为。在这种情况下,它很好,因为它是一个非常简单的列表,但这不是一个好的做法。:d我已经更改了
locations.txt
的源代码,现在它可以工作了,谢谢<代码>[{“id”:“1”,“标签”:“1”,“名称”:“普利茅斯”},{“id”:“2”,“标签”:“2”,“名称”:“托基”}]