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

1 resposta
P

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():
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);
            });
        }));
    }
}

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

1 Resposta

P

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:

Criado 25 de maio de 2012
Ultima resposta 25 de mai. de 2012
Respostas 1
Participantes 1