admin管理员组

文章数量:1197159

Can anyone tell me why I'm getting this error for the code below:

Uncaught TypeError: Cannot set property '0' of undefined

var vehicles = [];
$.get('../poll/index.php?data=vehicles', function(data) {

    var rows = $(data).find('row').length;
    for (var i = 0; i < rows; i++) {
        vehicles[i][0] = $(data).find('row').eq(i).find('stage').text();
        vehicles[i][1] = $(data).find('row').eq(i).find('direction').text();
        vehicles[i][2] = $(data).find('row').eq(i).find('stageName').text();
        vehicles[i][3] = $(data).find('row').eq(i).find('atco').text();
        vehicles[i][4] = $(data).find('row').eq(i).find('service').text();
        vehicles[i][5] = $(data).find('row').eq(i).find('journey').text();
        vehicles[i][6] = $(data).find('row').eq(i).find('fleet').text();
        vehicles[i][7] = $(data).find('row').eq(i).find('longitude').text();
        vehicles[i][8] = $(data).find('row').eq(i).find('latitude').text();
        vehicles[i][9] = $(data).find('row').eq(i).find('operator').text();
        vehicles[i][10] = $(data).find('row').eq(i).find('position').text();
    }

}, 'xml');

Can anyone tell me why I'm getting this error for the code below:

Uncaught TypeError: Cannot set property '0' of undefined

var vehicles = [];
$.get('../poll/index.php?data=vehicles', function(data) {

    var rows = $(data).find('row').length;
    for (var i = 0; i < rows; i++) {
        vehicles[i][0] = $(data).find('row').eq(i).find('stage').text();
        vehicles[i][1] = $(data).find('row').eq(i).find('direction').text();
        vehicles[i][2] = $(data).find('row').eq(i).find('stageName').text();
        vehicles[i][3] = $(data).find('row').eq(i).find('atco').text();
        vehicles[i][4] = $(data).find('row').eq(i).find('service').text();
        vehicles[i][5] = $(data).find('row').eq(i).find('journey').text();
        vehicles[i][6] = $(data).find('row').eq(i).find('fleet').text();
        vehicles[i][7] = $(data).find('row').eq(i).find('longitude').text();
        vehicles[i][8] = $(data).find('row').eq(i).find('latitude').text();
        vehicles[i][9] = $(data).find('row').eq(i).find('operator').text();
        vehicles[i][10] = $(data).find('row').eq(i).find('position').text();
    }

}, 'xml');
Share Improve this question asked Jul 8, 2013 at 19:20 jskidd3jskidd3 4,78315 gold badges66 silver badges131 bronze badges 5
  • 2 vehicles[i] is undefined. Define it first. – crush Commented Jul 8, 2013 at 19:21
  • because the "vehicles" array is empty, would be my guess... – Steve H. Commented Jul 8, 2013 at 19:22
  • Side note: your code is horribly inefficient. You should store $(data).find('row') and $(data).find('row').eq(i) in variables so that you don't perform too many unnecessary DOM queries. – Andy E Commented Jul 8, 2013 at 19:24
  • Thanks Andy, I'm aware it's terrible I'm just doing this for test purposes. :) – jskidd3 Commented Jul 8, 2013 at 19:25
  • As long as you're aware... ;-) – Andy E Commented Jul 8, 2013 at 19:25
Add a comment  | 

2 Answers 2

Reset to default 22

You need to define each child array, e.g.

var vehicles = []; // parent array;
vehicles[0] = []; // first child array;

so you would need:

for (var i = 0; i < rows; i++) {
     var vehicles[i] = [];
     ... rest of code here ...
}

vehicles[i] has no value assigned to it.

Add a line:

vehicles[i] = [];

at the top of the loop.

本文标签: javascriptCannot set property 39039 of 2D arrayStack Overflow