none
Consulta Ajax com Json RRS feed

  • Pergunta

  • Boa Tarde

    Estou fazendo uma consulta no banco usando Ajax e Json.

    Meu script esta funcionando, ele pega o valor do campo, envia para o controller, no controller faz a pesquiza e me retorna um Json com os dados.

    O json esta retornando para a view com os dados corretos, mas na hora de o JavaScript adicionar os dados no elemento HTML não esta dando certo.

    Tenho certeza que é alguma barberagem que estou fazendo, pois JavaScript ainda é algo cabuloso para mim.

    Meu HTML

    <p><input type="text" id="txtBusca" name="txtBusca"  onblur="ExecutaCliente();" /></p>
    <p><b>Resultado:</b></p>
    <p id="resultado"></p>

    Meu Script

    function ExecutaCliente() {
        
        $.ajax({
        url: "/Chamado/DropCliente",
        data: { termo: $("#txtBusca").val() },
        type: "post",
        dataType: "json",
        beforeSend: function (XMLHttpRequest) {
            $("#resultado").empty();
            $("#resultado").append("inicio");
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $("#resultado").empty();
            $("#resultado").append("erro");
        },
        success: function (data, textStatus, XMLHttpRequest) {
            $("#resultado").empty();
            $(data).each(function () {
                $("#resultado").append("Nome: " + this.Nome + " Sobrenome:"
                + this.Sobrenome + " <br/>");
            });
        }
    });
    }

    O retorno do meu Json

    Desde ja agradeço


    Paulo Marcelo Dalbosco

    quarta-feira, 6 de fevereiro de 2013 20:02

Respostas

  • Remove essa linha:

    dataType: "json",
    e tenta denovo pra ver se vai.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze quinta-feira, 7 de fevereiro de 2013 13:08
    • Marcado como Resposta Paulo M Dalbosco quinta-feira, 7 de fevereiro de 2013 13:11
    quinta-feira, 7 de fevereiro de 2013 13:08

Todas as Respostas

  • Você está tentando adicionar o sobrenome tb, porêm no seu objeto de retorno só existe o nome.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quarta-feira, 6 de fevereiro de 2013 20:18
  • Desculpa, ali eu estava fazendo um teste sem o Sobrenome, mas mesmo com o Sobrenome não esta funcionando. Ele cai na função de erro do JavaScript

    Paulo Marcelo Dalbosco

    quarta-feira, 6 de fevereiro de 2013 20:59
  • Ele retorna um dado mas mesmo assim cai no '.error'?

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quarta-feira, 6 de fevereiro de 2013 21:29
  • Isso mesmo! Ele imprime no
    <p id="resultado"></p>
    erro

    Paulo Marcelo Dalbosco

    quarta-feira, 6 de fevereiro de 2013 21:49
  • Olha em network qual o código de status de retorno.

    E olha em seu código se existe algo que sete o valor do status, exemplo:

    Response.StatusCode = 500;


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quarta-feira, 6 de fevereiro de 2013 21:51
  • Murilo

    Na aba Headers do Chrome tem o status:

    Status Code:

    200 OK


    Paulo Marcelo Dalbosco

    quinta-feira, 7 de fevereiro de 2013 10:43
  • Então ele deveria entrar no success.. mto estranho isso haha.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 7 de fevereiro de 2013 10:45
  • Poise, maluquice cara!! hahahaha

    Será que não é tipo que esta vindo do controller? Ele esta me retornando uma list do tipo anonymous.


    Paulo Marcelo Dalbosco


    quinta-feira, 7 de fevereiro de 2013 11:08
  • Eu mudei a forma de fazer a pesquiza no controller e agora ele me traz um erro dizendo que não conseguiu serializar o objeto. Vou procurar algo na internet!

    A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Cliente_BDE42CEBAA664C5717111DD47B8B242BB93A95E675C9E22712FEC58AF362FA5C'.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.InvalidOperationException: A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Cliente_BDE42CEBAA664C5717111DD47B8B242BB93A95E675C9E22712FEC58AF362FA5C'.


    Paulo Marcelo Dalbosco

    quinta-feira, 7 de fevereiro de 2013 11:13
  • Você precisa fazer um select nas propriedades que quer selecionar uma a uma caso alguma propriedade do model seja um proxy.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 7 de fevereiro de 2013 11:15
  • Boa Murilo! Era isso mesmo!

    Mas ainda não deu certo! =P

    Meu Controller

     Dim RetornaJson = (From c In db.Clientes Where c.CNPJ().Contains(termo) Select c.NomeFantasia).ToList
    
                Return Json(RetornaJson)

    Script

    function ExecutaCliente() {
        
        $.ajax({
        url: "/Chamado/DropCliente",
        data: { termo: $("#txtBusca").val() },
        type: "post",
        dataType: "json",
        beforeSend: function (XMLHttpRequest) {
            $("#resultado").empty();
            $("#resultado").append("inicio");
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $("#resultado").empty();
            $("#resultado").append("erro");
        },
        success: function (data, textStatus, XMLHttpRequest) {
            $("#resultado").empty();
            $(data).each(function () {
                $("#resultado").append("Nome: " + this.NomeFantasia + " <br/>");
            });
        }
    });
    }

    Ele ainda esta caindo no erro, achei curioso agora que ele não tráz mais um objeto com o nome de "NomeFantasia" que é oq o Script espera. Ele esta vindo assim:


    Paulo Marcelo Dalbosco

    quinta-feira, 7 de fevereiro de 2013 11:31
  • Se você quiser trazer como um obj você precisa fazer assim:

    Select new { NomeFantasia = c.NomeFantasia }

    isso no c#.. no VB eu não sei como é hehe.

    Mas então.. ta muito estranho isso.. dá um console.log(XMLHttpRequest) e vê se tem alguma mensagem de erro.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 7 de fevereiro de 2013 11:35
  • Deu certo criar um objeto!

    Dim RetornaJson = (From c In db.Clientes Where c.CNPJ().Contains(termo) Select New With {Key .NomeFantasia = c.NomeFantasia}).ToList
    

    Mas o script ainda não funciona! hahahahaha

    Como eu utilizo o "console.log" Murilo? Obrigado.


    Paulo Marcelo Dalbosco

    quinta-feira, 7 de fevereiro de 2013 12:35
  • error: function (XMLHttpRequest, textStatus, errorThrown) {
            console.log(XMLHttpRequest);
    
            $("#resultado").empty();
            $("#resultado").append("erro");
        },
    ai na aba 'Console' do navegador você olha as propriedades do objeto que vai aparecer.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 7 de fevereiro de 2013 12:36
  • Eu não entendi muita coisa do retorno do console! hahahaha

    Mas me chamou a atenção o Status Text : parsererror


    Paulo Marcelo Dalbosco


    quinta-feira, 7 de fevereiro de 2013 13:05
  • Remove essa linha:

    dataType: "json",
    e tenta denovo pra ver se vai.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze quinta-feira, 7 de fevereiro de 2013 13:08
    • Marcado como Resposta Paulo M Dalbosco quinta-feira, 7 de fevereiro de 2013 13:11
    quinta-feira, 7 de fevereiro de 2013 13:08
  • Funcionou! hahahaha

    Pode me explicar o que ocorreu?

    Muito Obrigado pela ajuda Murilo!


    Paulo Marcelo Dalbosco

    quinta-feira, 7 de fevereiro de 2013 13:10
  • Acho que é porque você está retornando os dados como string e não está o usando o método Json() né?

    Nesse caso o jquery tenta fazer o parse da string mas acaba não conseguindo(não sei porquê).

    Ai se você tira aquela linha, ele não tenta mais fazer o parse.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 7 de fevereiro de 2013 13:15
  • hahahaha

    entendi!

    Obrigado pela explicação!


    Paulo Marcelo Dalbosco

    quinta-feira, 7 de fevereiro de 2013 13:24