[RESOLVIDO]Array is undefined no Jquery + JSON + Struts2

Boa noite pessoas.
Estou com um problema meio complicado, não consigo entender.
Estou fazendo requisições via Ajax, porém, quando tenho a resposta e analiso o array recebido via JSON, este é analisado como indefinido.
Tenho 3 métodos identicos. Um para listar marcas de tênis, outro para listar materiais de tênis e outro para listar os tamanhos. Somente os tamanhos são executados com sucesso.
Já testei pra ver se o JSON está vindo com valor null, mas não está. Está sendo retornado igual o de listar tamanhos.

Os erros ocorrem nos métodos listBrand() e listMaterial(). valIndex[i] is undefined:

list += "<option value='" + valIndex[i].id + "'>" + valIndex[i].material + "</option>";

Arquivo JS completo
Executo o método showCreateTennis():

[code]

function CreateTennis(){

this.brand = "#brand.tennis";
this.size = "#size.tennis";
this.material = "#material.tennis";

this.createTennis = function(){
    cProduct = new CreateProduct();
    cTennis = new CreateTennis();
    util = new Util();
    var form = 
    "CreateTennisAction?"
    +"tennis.name=" + $(cProduct.name).val()
    +"&tennis.weight=" + $(cProduct.weight).val()
    +"&tennis.height=" + $(cProduct.height).val()
    +"&tennis.width=" + $(cProduct.width).val()
    +"&tennis.length=" + $(cProduct.length).val()
    +"&tennis.diameter=" + $(cProduct.diameter).val()
    +"&tennis.price=" + $(cProduct.price).val()
    +"&tennis.description=" + $(cProduct.description).val()
    +"&idBrand=" + $(cTennis.brand).val()
    +"&idSize=" + $(cTennis.size).val()
    +"&idMaterial=" + $(cTennis.material).val();
    util.ajaxRequest(form, true);    
}

this.showCreateTennis = function(){
    cTennis = new CreateTennis();
    cTennis.listBrand();
    cTennis.listMaterial();
    cTennis.listSize();
    $('#createTennis.window').show();
}

this.listBrand = function(){
    var keyIndex, valIndex = [];
    var list = "<select id='brand' class='tennis'>";
    $.ajax($.getJSON("ListBrandAction", function(response){
        $.each(response, function(key, val){
            keyIndex = key;
            valIndex = val;
            for(var i = 0; i < keyIndex.length -1; i++){
                list += "<option value='" + valIndex[i].id + "'>" + valIndex[i].brand + "</option>";                    
            }
            list += "</select>";
            alert(list);
            $('#brand.tennis').replaceWith(list);
        });
    }));
}

this.listSize = function(){
    var keyIndex, valIndex = [];
    var list = "<select id='size' class='tennis'>";
    $.ajax($.getJSON("ListSizeAction", function(response){
        $.each(response, function(key, val){
            keyIndex = key;
            valIndex = val;
            for(var i = 0; i < keyIndex.length -1; i++){
                list += 
                    "<option value='" + valIndex[i].id + "'>" + valIndex[i].size + "</option>";                    
            }
            list += "</select>";
            alert(list);
            $('#size.tennis').replaceWith(list);
        });
    }));
}

this.listMaterial = function(){
    var keyIndex, valIndex = [];
    var list = "<select id='material' class='tennis'>";
    $.ajax($.getJSON("ListMaterialAction", function(response){
        $.each(response, function(key, val){
            keyIndex = key;
            valIndex = val;
            for(var i = 0; i < keyIndex.length -1; i++){
                list += 
                    "<option value='" + valIndex[i].id + "'>" + valIndex[i].material + "</option>";                    
            }
            list += "</select>";
            alert(list);
            $('#material.tennis').replaceWith(list);
        });
    }));
}

}[/code]

Se aguém puder me ajudar, ficarei muito grato.

Resolvi trocando keIndex por valIndex… só não entendi por que, mas deu certo. Sempre user como chave para fazer a contagem… Mas o importante é que está funcionando. Talvez seja a versão do Jquery que estou usando. Não sei, vai saber… só Deus que sabe :slight_smile: