Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

interlokk

[Resolvido] função ajax não roda no IE

Recommended Posts

Pessoal, tô com um projeto que preciso entregar urgentemente e surgiu um probleminha numa função ajax de minha página que não está rodando no maldito IE (roda normalmente no Firefox e no chrome). Alguma dicade como fazer rodar no IE? Estou pendindo ajuda pois não entendo nada de ajax. Valeu.

 


// JavaScript Document
function RetornoAjax(id, url, container) {
var xmlHttp=GetXmlHttpObject()
if (xmlHttp==null) {
 	alert ("Este browser não suporta a HTTP Request")
 	return
}

var url=url;
url=url+"?id="+id;
url=url+"&sid="+Math.random();
document.getElementById("sending").style.visibility="visible";

xmlHttp.onreadystatechange=function() {
 	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
     	document.getElementById(container).innerHTML=xmlHttp.responseText
   document.getElementById("sending").style.visibility="hidden";
 	}
}
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

Esta função é chamada num comando onchange situado numa caixa de seleção que preenche automaticamente outra caisa de seleção dependendo do que foi selecionado na primeira:

 

onchange="RetornoAjax(this.value, '/aluno/combo2.asp', 'disciplina')"

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste a função:

GetXmlHttpObject()

 

experimente este instanciamento:

http://forum.imasters.com.br/index.php?/topic/403171-pagina-dentro-de-div-ajax-problema-ao-atualizar/page__view__findpost__p__1581230

 

aparece algum erro no canto inferior esquerdo do teu IE ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem nenhuma função por trás do GetXmlHttpObject(), me parece que é algo nativo ou sei lá. No IE não aparece nehum erro. Eu uso a versão 8.0

 

Eu precisava mudar a propria função pois ela se adapta bem ao meu objetivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

??

 

se você não postar a declaração, da função que eu pedi, fica impossível te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, foi mals, na hora de compiar o codigo eu não percebi que faltava um pedaço. aí vai a função inteira com a tal declaração

 

// JavaScript Document
function RetornoAjax(id, url, container) {
var xmlHttp=GetXmlHttpObject()
if (xmlHttp==null) {
 	alert ("Este browser não suporta a HTTP Request")
 	return
}

var url=url;
url=url+"?id="+id;
url=url+"&sid="+Math.random();
document.getElementById("sending").style.visibility="visible";

xmlHttp.onreadystatechange=function() {
 	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
     	document.getElementById(container).innerHTML=xmlHttp.responseText
   document.getElementById("sending").style.visibility="hidden";
 	}
}
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function GetXmlHttpObject() {
var objXMLHttp=null

 	if (window.XMLHttpRequest)
     	objXMLHttp=new XMLHttpRequest()
 	else if (window.ActiveXObject)
     	objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")

return objXMLHttp
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá... então, como sugeri:

troca:

function GetXmlHttpObject() {
var objXMLHttp=null

        if (window.XMLHttpRequest)
        objXMLHttp=new XMLHttpRequest()
        else if (window.ActiveXObject)
        objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")

return objXMLHttp
}
por:

function GetXmlHttpObject() {
        if(window.XMLHttpRequest){
                return new XMLHttpRequest();
        }else if(window.ActiveXObject){
                var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
                for(var i = 0; i < prefixes.length; i++){
                        try     {
                                return new ActiveXObject(prefixes[i] + ".XMLHTTP");
                        } catch (e) {}
                }
        }
}
e faça os testes

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que reproduzi da situação aqui, acho que o problema é o innerHTML no select.. o IE não reconhece isso..

http://support.microsoft.com/kb/276228/pt-br

 

 

essa minha implementação, usa um retorno jSON:

http://forum.imasters.com.br/index.php?/topic/365795-combos-dependentes-ajax-jquery/

 

ainda nessa tua implementação, uma solução, seria ter que retornar todo o select, inclusive a tag <select></select>, para então dar .innerHTML numa DIV.. (pura gambiarra)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ihh, eu tentei essa gambiarra do encapsulamente em div mas não deu certo (no combo quando seleciono a primeira select a segunda fira texto com as options enfileiradas...). Sua sugestão não me serviu pois eu uso asp. você não teria nada sem usar php? Algo em jquery, por exemplo? valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

só altere a parte php, e reescreva em asp uê..

 

to usando jquery ali...

Compartilhar este post


Link para o post
Compartilhar em outros sites

só altere a parte php, e reescreva em asp uê..

 

to usando jquery ali...

 

 

Vamos ser claros: estou pedindo socorro pq não sei java nem php. Uso vbscript em asp. Só. Se soubesse php usaria php. Mas, valeu a ajuda. Vou pesquisar mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você nem precisa saber php cara.. a única coisa que o código javascript ali, precisa é de um retorno jSON

http://www.wbruno.com.br/scripts/combos-dependentes.php

 

e só.

Java é Java

e javascript é javascript

 

são 2 linguagens distintas.

 

Eu também não sei asp, logo não consigo converter o php que fiz para asp para você.. e se você sabe asp, deve ser capaz de fazer oq fiz em php.

 

De novo, a unica coisa que o jQuery precisa ali, é um retorno jSON:

http://www.wbruno.com.br/scripts/combos-dependentes-function.inc.php?idCombo1=2

http://www.wbruno.com.br/scripts/combos-dependentes-function.inc.php?idCombo1=1

 

Se você conseguir que a tua linguagem server-side, asp, gere esse retorno, pronto.. tá feito.. a parte js te dei ali no link que postei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi. coloquei tudo em jquery:

 

// JavaScript Document
$(document).ready(function(){
 	$('#faculdade').change(function(){
 	$('#curso').load('combo1.asp?id='+$('#faculdade').val() );
 	});
});

$(document).ready(function(){
 	$('#curso').change(function(){
 	$('#disciplina').load('combo2.asp?id='+$('#curso').val() );
 	});
});
 	
$(document).ready(function(){
 	$('#disciplina').change(function(){
 	$('#turma').load('combo3.asp?id='+$('#disciplina').val() );
 	});
});

A organização da pagina de chamada e as páginas alvos ficaram do mesmo jeito. As 3 selects abrem respectivamente com as funções acima. Apenas inclui uma chamada para uma biblioteca jquery no cabeçalho.

 

Valeu a ajuda mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.