Array
(
)

Do PHP para o C Sharp

Pjava
   - 30 jul 2013

Estou tentando aprender a como fazer com Jquery e Ajax, a consulta por CEP, tipo, digito o CEP e ele já preenche a rua, cidade, bairro e uf. Acontece que a maioria dos sites eu pego os exemplos em PHP e na hora de passar alguma coisa do PHP para o C# eu me perco, tipo, no código ele faz menção de uma página PHP. Como eu faço ela se tornar C# ou Asp.Net? Abaixo o código em PHP:
<?php

$cep = $_POST['cep'];

$reg = simplexml_load_file("http://cep.republicavirtual.com.br/web_cep.php?formato=xml&cep=" . $cep);

$dados['sucesso'] = (string) $reg->resultado;
$dados['rua'] = (string) $reg->tipo_logradouro . ' ' . $reg->logradouro;
$dados['bairro'] = (string) $reg->bairro;
$dados['cidade'] = (string) $reg->cidade;
$dados['estado'] = (string) $reg->uf;

echo json_encode($dados);

?>

Thiagoporto
   - 30 jul 2013

essa url retorna um xml, no próprio c# existe a possibilidade de ler xml dá uma pesquisada.

Thiagoporto
   - 30 jul 2013

percebi uma coisa, ele pega uma url que retorna um xml, e joga os dados em uma variável e depois converte para json, é muita coisa, no próprio jquery com ajax você poderia pegar apenas a url e ler e jogar aonde quiser.

Pjava
   - 30 jul 2013

Então é exatamente isso, mas não sei como substituir isso tudo no C#. Abaixo os códigos do html, jquery e ajax.

#Código

<!DOCTYPE html>
<html>
    <head>
        <title>Consulta de CEP - por rafaelWendel.com</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type='text/javascript' src='http://files.rafaelwendel.com/jquery.js'></script>
        <script type='text/javascript' src='cep.js'></script>
 
    </head>
    <body>
        <h1>Preenchimento automático com consulta de CEP - por <a href="http://www.rafaelwendel.com" title="Visite o blog www.rafaelwendel.com">rafaelWendel.com</a></h1>
        <form id="form1" class="form1" method="post">
            <label>CEP (Somente números):</label><br />
            <input type="text" name="cep" id="cep" maxlength="8" />
 
            <br /><br />
 
            <label>Rua:</label><br />
            <input type="text" name="rua" id="rua" size="45" />
 
            <br /><br />
 
            <label>Número:</label><br />
            <input type="text" name="numero" id="numero" size="5" />
 
            <br /><br />
 
            <label>Bairro:</label><br />
            <input type="text" name="bairro" id="bairro" size="25" />
 
            <br /><br />
 
            <label>Cidade:</label><br />
            <input type="text" name="cidade" id="cidade" size="25" />
 
            <br /><br />
 
            <label>Estado:</label><br />
            <input type="text" name="estado" id="estado" size="2" />
 
            <br /><br />
 
            <input type="submit" value="Salvar Dados" />
 
        </form>
    </body>
</html>


Veja que url do ajax ele chama a página. O que passo com C#?
#Código
$(document).ready( function() {
   /* Executa a requisição quando o campo CEP perder o foco */
   $('#cep').blur(function(){
           /* Configura a requisição AJAX */
           $.ajax({
                url : 'consultar_cep.php', /* URL que será chamada */ 
                type : 'POST', /* Tipo da requisição */ 
                data: 'cep=' + $('#cep').val(), /* dado que será enviado via POST */
                dataType: 'json', /* Tipo de transmissão */
                success: function(data){
                    if(data.sucesso == 1){
                        $('#rua').val(data.rua);
                        $('#bairro').val(data.bairro);
                        $('#cidade').val(data.cidade);
                        $('#estado').val(data.estado);
 
                        $('#numero').focus();
                    }
                }
           });   
   return false;    
   })
});

Thiagoporto
   - 30 jul 2013

use essa http://correiosapi.apphb.com/ vai ajudar, entra no site e veja o exemplo

Thiagoporto
   - 30 jul 2013

Fiz um exemplo bem simples

#Código

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Usando REST para recuperar CEP</title>
	<script src="jquery.js"></script>

	<script>		
		
		$(document).ready(function(){		

			$("#carregando").hide();
			$("#btnPesquisar").click(function(){
				
				$.ajax({
					url: 'http://correiosapi.apphb.com/cep/'+$("#txtValor").val(),
					dataType: 'jsonp',
					beforeSend: function(){
						$("#carregando").show();							
					},
					success: function(data){

						$(data).each(function(){
							$("#resultado").append("<h2>CEP: "+data.cep+"</h2>"+
												   "<h2>Tipo: "+data.tipoDeLogradouro+"</h2>"+
												   "<h2>Logradouro: "+data.logradouro+"</h2>"+
												   "<h2>Bairro: "+data.bairro+"</h2>"+
												   "<h2>Cidade: "+data.cidade+"</h2>"+
												   "<h2>UF: "+data.estado+"</h2>");							
						})
					},
					complete: function(){
						$("#carregando").hide();								
					}
				})
				
			});
		});
	</script>
</head>
<body>
	<fieldset>
		<legend>Informe o número do CEP(Somente números)</legend>
		<input type="text" id="txtValor">
		<input type="button" id="btnPesquisar" value="Pesquisar">
	</fieldset>

	<br>	
	<div id="carregando">
		<img src="ajax-loader.gif"> Carregando...
	</div>

	<div id="resultado"></div>
</body>
</html>

Joel Rodrigues
   - 30 jul 2013

Opa. Eu publiquei recentemente um artigo sobre isso: http://www.devmedia.com.br/consultando-endereco-por-cep-em-c/28061

Thiagoporto
   - 30 jul 2013


Citação:
Opa. Eu publiquei recentemente um artigo sobre isso: http://www.devmedia.com.br/consultando-endereco-por-cep-em-c/28061


Perfeito!

Pjava
   - 31 jul 2013

Ok, vou conferir os dois

Pjava
   - 31 jul 2013

Thiago, não consegui fazer funcionar. O que devo fazer?

Thiagoporto
   - 31 jul 2013

entra no meu github.com/tporto e pega os fontes

Pjava
   - 31 jul 2013

Olá Joel, vi seu exemplo. O que passa que para mim é um teste e tem que ser feito com JQuery e Ajax.

Pjava
   - 31 jul 2013

Thiago, esses são os erros que aparecem no debug do chrome

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:15056/jquery.js
Uncaught ReferenceError: $ is not defined TesteGeral.aspx:14
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:15056/ajax-loader.gif
[Wed Jul 31 2013 09:43:54] <ErrorType: ReferenceError, Message: tcmInjectBanner is not defined ,FuncName: pluginId: 108>

Pjava
   - 31 jul 2013

O exemplo baixado funcionou. Vou comparar e ver o que está errado entre os dois

Pjava
   - 31 jul 2013

Então, o que está passando é se eu coloco esse código em página aspx não funciona, mas se for uma html simples aí funciona. Porque não funciona em uma aspx?

Thiagoporto
   - 31 jul 2013

pode ser problema de carregamento, manda seu código aspx

Pjava
   - 31 jul 2013

#Código

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TesteGeral.aspx.cs" Inherits="TimeAjax.TesteGeral" %>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Usando REST para recuperar CEP</title>
	<script src="jquery.js"></script>
    <script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
	<script type="text/javascript">		
		
		$(document).ready(function(){	

			$("#carregando").hide();
			$("#btnPesquisar").click(function(){
				
				$.ajax({
					url: 'http://correiosapi.apphb.com/cep/'+$("#txtValor").val(),
					dataType: 'jsonp',
					beforeSend: function(){
						$("#carregando").show();							
					},
					success: function(data){

						$(data).each(function(){
							$("#resultado").append("<h2>CEP: "+data.cep+"</h2>"+
												   "<h2>Tipo: "+data.tipoDeLogradouro+"</h2>"+
												   "<h2>Logradouro: "+data.logradouro+"</h2>"+
												   "<h2>Bairro: "+data.bairro+"</h2>"+
												   "<h2>Cidade: "+data.cidade+"</h2>"+
												   "<h2>UF: "+data.estado+"</h2>");							
						})
					},
					complete: function(){
						$("#carregando").hide();								
					},
					error: function () {
						alert("CEP não encontrado!")
					}
				})
				
			});
		});
	</script>
</head>
<body>
	<fieldset>
		<legend>Informe o número do CEP(Somente números)</legend>
		<input type="text" id="txtValor">
		<input type="button" id="btnPesquisar" value="Pesquisar">
	</fieldset>

	<br>	
	<div id="carregando">
		<img src="ajax-loader.gif"> Carregando...
	</div>

	<div id="resultado"></div>
</body>
</html>

Thiagoporto
   - 31 jul 2013

#Código

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#carregando").hide();
            $("#btnPesquisar").click(function () {
                $.ajax({
                    url: 'http://correiosapi.apphb.com/cep/' + $("#txtValor").val(),
                    dataType: 'jsonp',
                    beforeSend: function () {
                        $("#carregando").show();
                    },
                    success: function (data) {
                        $(data).each(function () {
                            $("#resultado").append("<h2>CEP: " + data.cep + "</h2>" +
                                "<h2>Tipo: " + data.tipoDeLogradouro + "</h2>" +
                                "<h2>Logradouro: " + data.logradouro + "</h2>" +
                                "<h2>Bairro: " + data.bairro + "</h2>" +
                                "<h2>Cidade: " + data.cidade + "</h2>" +
                                "<h2>UF: " + data.estado + "</h2>");
                        })
                    }, complete: function () {
                        $("#carregando").hide();
                    },
                    error: function () {
                        alert("CEP não encontrado!")
                    }
                })
            });
        });

    </script>
</head>
<body>
    <form id="form1" runat="server">
        <fieldset><legend>Informe o número do CEP(Somente números)</legend>
            <input type="text" id="txtValor"/>
            <input type="button" id="btnPesquisar" value="Pesquisar"/>
        </fieldset>
        <br/>
        <div id="carregando">
            <img src="ajax-loader.gif"/>
            Carregando...     </div>
        <div id="resultado"></div>
    </form>
</body>
</html>



você está colocando o jquery duas vezes

Pjava
   - 31 jul 2013

De qualquer forma, não funcionou. Vou tentar outra oportunidade, consigo fazer, mas sem jquery e ajaxa. Esse meu código abaixo funciona. Mas gostaria de funcionar com jquery e ajax.

protected void btnCep_Click(object sender, EventArgs e)
{
string cep = txtcep.Text;
string url = "http://republicavirtual.com.br/web_cep.php?cep=" + cep + "&formato=json";

System.Net.WebRequest req = System.Net.WebRequest.Create(url);
System.Net.WebResponse resp = req.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
string ret = sr.ReadToEnd().Trim();

System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
Dictionary<string, string> result = json.Deserialize<Dictionary<string, string>>(ret);

if (result["resultado"] != "0")
{
estado.Text = result["uf"];
cidade.Text = result["cidade"];
bairro.Text = result["bairro"];
rua.Text = result["tipo_logradouro"] + " " + result["logradouro"];
}

ScriptManager.RegisterStartupScript(upEndereco, upEndereco.GetType(), Guid.NewGuid().ToString(), "$('.cep').mask('99999-999');", true);
}