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