Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Possuo uma pagina com um painel e duas tabs pelo Bootstrap.
Nessa pagina especifico um periodo de datas para imprimir um relatório.
No tab 1
Possuo apenas dois inputs do tipo date e um button
Ao selecionar a data possuo um evento Onclick no button que passa os values dos inputs para uma função que carrega no tab_2 os resultados via Ajax.
No tab 2
Imprimo diversos resultados do banco de dados em php.
Porem, nesse tab_2, nem um "misero" alert() em javascript funciona.
No console não gera nenhum erro ou warning.
Html
<!-- ### SELECIONA DATA ### -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane conteudo active" id="area_1">
<div class="col-lg-12 col-md-12 col-xs-12">
<center>
<div class="alert alert-info" role="alert">
<p><h4><b>ATENÇÃO:</b></h4></p>
<p>Somente vendas referente ao ano de <b>2017</b> é que estão disponíveis</p>
</div>
<div class="form-inline">
<div class="input-group input-group-lg">
<span class="input-group-addon" data-toggle="tooltip" data-placement="top" title="Data inicial da consulta"><i class="glyphicon glyphicon-calendar"></i></span>
<input type="date" class="form-control" style="border-radius: opx" name="inicial" id="inicial">
</div>
<div class="input-group input-group-lg input-data hidden-xs">
<span class="input-group-addon">ATÉ</span>
</div>
<div class="input-group input-group-lg">
<input type="date" class="form-control" style="border-radius: 0px" name="final" id="final">
<span class="input-group-addon" data-toggle="tooltip" data-placement="top" title="Data final da consulta"><i class="glyphicon glyphicon-calendar"></i></span>
</div>
</div>
<br />
<br />
<a class="btn btn-success btn-block" href="#area_2" id="next_2" aria-controls="area_2" role="tab" data-toggle="tab" onclick="mostraConteudo('lista_relatorio.php?filtro=mensal&inicial='+document.getElementById('inicial').value+'&final='+document.getElementById('final').value,'show_report');">Carregar análise <i class="glyphicon glyphicon-circle-arrow-right"></i></a>
</center>
</div>
</div>
<!-- ### FIM - SELECIONA DATA ### -->
<!-- ############################################################################# -->
<!-- ### RELATÓRIO VENDAS ### -->
<div role="tabpanel" class="tab-pane conteudo fade" id="area_2">
<div id="show_report"></div> <!-- div onde dados da pesquisa ajax é carregada -->
</div>
<!-- ### FIM - RELATÓRIO VENDAS ### -->
<!-- ############################################################################# -->
No arquivo lista_relatorio.php é onde imprimo diversos dados de acordo com a data.
Porem, neste arquivo, nem um simples alert() é apresentado.
Alguem alguma sugestão?
Olá Vitor,
Exato! o arquivo lista_relatório é chamado via ajax com atributos recebidos via GET do onclick do meu html como mostrei no código acima.
E todo e qualquer script, mesmo um alert() não é executado nele... isso tem alguma forma de resolver?
Arquivos chamados via ajax não conseguem executar scripts neles?
Olá Guilherme então vamos por partes...
O que acontece é que quando a requisição é feita por ajax num método que retorna um é ActionResult/PartialViewResult é retornado o objeto e não o HTML que é gerado quando se é feita uma requisição normal(por url).
Tudo depende do que queres fazer...
Podes Postar o código de ajax que estás a utilizar para te poder ajudar melhor ?
Ou seja todas tudo o que está no teu ficheiro lista_relatorio.php nada vai ser mostrado, o post via ajax não serve para isso , serve sim para executares um arquivo php
Aconselho-te a estudar melhor esta função...
Vou deixar um link:
O script que utilizo para o ajax não sei quem é o autor e eu realizei somente a criação da função para passar os dados da url e da div de resultado
var xmlhttp = null;
// Conexão via XmlHttp
try {
xmlhttp = new XMLHttpRequest();
} catch(ee) {
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(E) {
xmlhttp = false;
}
}
}
function mostraConteudo(url, div) {
// Seleciona objeto
obj_div = document.getElementById(div);
// Verifica se existe xmlhttp
if (xmlhttp) {
if(xmlhttp.readyState != 1){
xmlhttp.open("POST", url, true);
xmlhttp.onreadystatechange = function() {
// Verifica estado da requisição
if (xmlhttp.readyState == 1) {
obj_div.innerHTML = "Aguarde ...";
} else if (xmlhttp.readyState == 4) {
// Verifica status da requisição
if (xmlhttp.status == 200) {
obj_div.innerHTML = xmlhttp.responseText;
} else {
obj_div.innerHTML = "Erro ao carregar ...";
}
}
}
}
}
xmlhttp.send(null);
}
Infelizmente, não consigo reduzir este codigo com o uso do jQuery porque o dono do projeto não quer.
Além disso, como os resultados das pesquisas são em TABs do bootstrap o uso convencional de um SUBMIT ficou "descartado" já que tudo ficaria "mais dificil" para poder aplicar submit e mostrar o TAB de resultados.
O que estou precisando é aplicar alguns scripts dentro de lista_relatório.php de acordo com os resultados da busca, mas como disse, nem um simples alert() é executado e como você mesmo disse @Vitor Mendes o código não é executado devido o retorno do objeto e não do html.
Entretanto, há como resolver isso?
Em outras paginas, com o mesmo fluxo de pesquisa e códigos eu consigo carregar MODALs e TOLLTIPs do bootstrap normalmente.Olá
Mostrar o alert() no script para o qual é feito o request acho que é impossivel não é umas questão de ele não "ler" o javascript é uma questão que ele retorna algo...
Se quiseres mostrar o alert tens de o meter na pagina onde está a função jquery e não na outra pagina ..
Faz esse teste abaixo ...
xmlhttp.open("POST", url, true);
xmlhttp.onreadystatechange = function() {
// Verifica estado da requisição
if (xmlhttp.readyState == 1) {
obj_div.innerHTML = "Aguarde ...";
} else if (xmlhttp.readyState == 4) {
// Verifica status da requisição
if (xmlhttp.status == 200) {
// repara que ele aqui vai mostrar o vamor que foi retornado o conteudo que foi retornado do outro ficheiro...
obj_div.innerHTML = xmlhttp.responseText;
alert(xmlhttp.responseText); // Acrescenta o alert aqui e mostra o diz o que ele mostra...
} else {
obj_div.innerHTML = "Erro ao carregar ...";
}
}
}
}
Lê os comentário que fiz e diz qualquer qualquer coisa
Estive a ver também que tens um erro no código que pode ser por isso que não esteja a funcionar ....
function mostraConteudo(url, div) {
// Seleciona objeto
var obj_div = document.getElementById(div);
// Verifica se existe xmlhttp
if (xmlhttp) {
if(xmlhttp.readyState != 1){
xmlhttp.open("POST", url, true);
xmlhttp.onreadystatechange = function() {
// Verifica estado da requisição
if (xmlhttp.readyState == 1) {
obj_div.innerHTML = "Aguarde ...";
} else if (xmlhttp.readyState == 4) {
// Verifica status da requisição
if (xmlhttp.status == 200) {
obj_div.innerHTML = xmlhttp.responseText;
} else {
obj_div.innerHTML = "Erro ao carregar ...";
}
}
}
}
}
xmlhttp.send(null);
}
está ai o código corrigido a variável obj_div não estava declarada ...
Abraço
Vítor Mendes
Olá guilherme Luis
Não entendi muito bem
Este arquivo lista_relatorio.php é chamado via ajax ? Se sim é normal que não mostre o alert....
O teu código ajax está a funcionar bem tens a certeza?