Put Json value in the variable

2

What am I doing wrong?

var GETEstado = $(this).val(json[0].GETEstado);
alert (GETEstado);

Alert is displaying

  

[object Object]

My complete code:

$(document).ready(function () {
    $(".transportadora").click(function () {
        id = $("input[type=radio][name='transportadora']:checked").val();
        estado = $("#estado2").val();
        $.getJSON("cotacoesBuscaTransportadora.php", {
            id_transportadora: id,
            estado: estado
        }, function (json) {
            $("#estadoT").val(json[0].estadoT);
            $("#valorCap").val(json[0].valorCap);
            $("#valorExcedCap").val(json[0].valorExcedCap);
            $("#valorAloremCap").val(json[0].valorAloremCap);
            $("#prazoCap").val(json[0].prazoCap);

            var GETEstado = JSON.stringify(json[0].GETEstado);
            var ResulteZero = JSON.stringify(json[0].ResulteZero);

        });
    });
});

jQuery(function ($) {
    if (GETEstado == "") {
        $.gritter.add({
            title: 'Erro',
            text: 'Preencha os dados do destinatário',
            class_name: 'gritter-error gritter-center'
        });
    }
    if (ResulteZero == 0) {
        $.gritter.add({
            title: 'Erro',
            text: 'Essa transportadora não entrega no estado de destino ou destino não cadastrado.',
            class_name: 'gritter-error gritter-center'
        });
    }
});
    
asked by anonymous 13.05.2015 / 14:37

2 answers

2

jQuery returns different things if it is used as getter or setter .

If you use $(this).val(json[0].GETEstado) you are using as a setter and will return a jQuery object, not a number or string with value which was set.

If you use $(this).val() it will return the value of this .

If your alert is to confirm that the value has been set correctly you should do so:

$(this).val(json[0].GETEstado);
var GETEstado = $(this).val();
alert (GETEstado);

In addition the problem you have in the code is asynchronous. $.getJSON will fetch the data and then need to run the second part of your code from its callback function. So:

$(document).ready(function () {
    $(".transportadora").click(function () {
        id = $("input[type=radio][name='transportadora']:checked").val();
        estado = $("#estado2").val();
        $.getJSON("cotacoesBuscaTransportadora.php", {
            id_transportadora: id,
            estado: estado
        }, function (json) {
            $("#estadoT").val(json[0].estadoT);
            $("#valorCap").val(json[0].valorCap);
            $("#valorExcedCap").val(json[0].valorExcedCap);
            $("#valorAloremCap").val(json[0].valorAloremCap);
            $("#prazoCap").val(json[0].prazoCap);

            var GETEstado = JSON.stringify(json[0].GETEstado);
            var ResulteZero = JSON.stringify(json[0].ResulteZero);
            //alert (GETEstado);
            next(GETEstado, ResulteZero);
        });
    });
});


function next(GETEstado, ResulteZero) {
    alert(GETEstado);
    if (GETEstado == "") {
        jQuery.gritter.add({
            title: 'Erro',
            text: 'Preencha os dados do destinatário',
            class_name: 'gritter-error gritter-center'
        });
    }
    if (ResulteZero == 0) {
        jQuery.gritter.add({
            title: 'Erro',
            text: 'Essa transportadora não entrega no estado de destino ou destino não cadastrado.',
            class_name: 'gritter-error gritter-center'
        });
    }
};
    
13.05.2015 / 14:55
2

The $(this).val(valor) fills the field and returns the corresponding jQuery object, that is, $(this) . This is why alert shows this object representation in text that you received.

If the field is being filled in correctly, just change your code a little:

var GETEstado = json[0].GETEstado;
$(this).val(GETEstado);
alert (GETEstado);
    
13.05.2015 / 14:50