Ir para conteúdo

POWERED BY:

Arquivado

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

Nuno Amaral

Carregar JavaScript por AJAX

Recommended Posts

Viva pessoal,

 

Tenho um problema num site:http://www.hotelcastelodevide.com/demo/

 

O problema é que quando carrego no link "Promoções", não carrega o javascript que tem na página que abre.

 

Tenho o seguinte código ajax (ajax2.js):

var loadedobjects=""var rootdomain="http://"+window.location.hostnamefunction carrega(url, containerid){var page_request = falseif (window.XMLHttpRequest) // if Mozilla, Safari etcpage_request = new XMLHttpRequest()else if (window.ActiveXObject){ // if IEtry {page_request = new ActiveXObject("Msxml2.XMLHTTP")} catch (e){try{page_request = new ActiveXObject("Microsoft.XMLHTTP")}catch (e){}}}elsereturn falsepage_request.onreadystatechange=function(){loadpage(page_request, containerid)}page_request.open('GET', url, true)page_request.send(null)}function loadpage(page_request, containerid){if(page_request.readyState == 1) { // Quando estiver carregando, exibe: carregando...			document.getElementById(containerid).innerHTML = '<div class="carregando"><br><font face="verdana" size="2" color="#666666">    <img src="ajax/loading.gif" />Carregando conteudos...</font></div>';		}	if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))document.getElementById(containerid).innerHTML=page_request.responseText}function ExtraiScript(texto){	var ini, pos_src, fim, codigo;	var objScript = null;	ini = texto.indexOf('<script', 0)	while (ini!=-1){		var objScript = document.createElement("script");		//Busca se tem algum src a partir do inicio do script		pos_src = texto.indexOf(' src', ini)		ini = texto.indexOf('>', ini) + 1;		//Verifica se este e um bloco de script ou include para um arquivo de scripts		if (pos_src < ini && pos_src >=0){//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script			//Marca como sendo o inicio do nome do arquivo para depois do src			ini = pos_src + 4;			//Procura pelo ponto do nome da extencao do arquivo e marca para depois dele			fim = texto.indexOf('.', ini)+4;			//Pega o nome do arquivo			codigo = texto.substring(ini,fim);			//Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano			codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");			// Adiciona o arquivo de script ao objeto que sera adicionado ao documento			objScript.src = codigo;		}else{//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script			// Procura o final do script			fim = texto.indexOf('</script>', ini);			// Extrai apenas o script			codigo = texto.substring(ini,fim);			// Adiciona o bloco de script ao objeto que sera adicionado ao documento			objScript.text = codigo;		}		//Adiciona o script ao documento		document.body.appendChild(objScript);		// Procura a proxima tag de <script		ini = texto.indexOf('<script', fim);		//Limpa o objeto de script		objScript = null;	}}

Não percebo por que não abre o JavaScript que ta na página "promoções".

 

Já estive a ler no fórum o item "Ler função JS via Ajax", mas não consegui resolver o problema.

 

Alguém me pode ajudar?

 

 

Obrigado

Nuno Amaral

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples meu amigo: você não chamou a função ExtraiScript no ResponseText.

Obrigado Micox pela resposta,Mas onde é que eu chamo a função?Faça um exemplo.Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não gosto de dar a resposta pronta não né? o cara tem que pensar. Maas, tá aí:

 

troque isto

if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))document.getElementById(containerid).innerHTML=page_request.responseText}

por isto

if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))var retorno = page_request.responseTextdocument.getElementById(containerid).innerHTML= retornoExtraiScript(retorno)}

Compartilhar este post


Link para o post
Compartilhar em outros sites

OBRIGADO MICOX PELA DICA

 

Mas há um problema.

 

Se eu colocar este código ele executa

<script language="JavaScript" type="text/javascript">

alert(2);

</script>

 

mas se for este ja não funciona

<script type="text/javascript">/************************************************ Switch Content script- © Dynamic Drive (www.dynamicdrive.com)* This notice must stay intact for legal use. Last updated April 2nd, 2005.* Visit http://www.dynamicdrive.com/ for full source code***********************************************/var enablepersist="on" //Enable saving state of content structure using session cookies? (on/off)var collapseprevious="no" //Collapse previously open content when opening present? (yes/no)var contractsymbol='- ' //HTML for contract symbol. For image, use: <img src="whatever.gif">var expandsymbol='+ ' //HTML for expand symbol.if (document.getElementById){document.write('<style type="text/css">')document.write('.switchcontent{display:none;}')document.write('</style>')}function getElementbyClass(rootobj, classname){var temparray=new Array()var inc=0var rootlength=rootobj.lengthfor (i=0; i<rootlength; i++){if (rootobj[i].className==classname)temparray[inc++]=rootobj[i]}return temparray}function sweeptoggle(ec){var thestate=(ec=="expand")? "block" : "none"var inc=0while (ccollect[inc]){ccollect[inc].style.display=thestateinc++}revivestatus()}function contractcontent(omit){var inc=0while (ccollect[inc]){if (ccollect[inc].id!=omit)ccollect[inc].style.display="none"inc++}}function expandcontent(curobj, cid){var spantags=curobj.getElementsByTagName("SPAN")var showstateobj=getElementbyClass(spantags, "showstate")if (ccollect.length>0){if (collapseprevious=="yes")contractcontent(cid)document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none"if (showstateobj.length>0){ //if "showstate" span exists in headerif (collapseprevious=="no")showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbolelserevivestatus()}}}function revivecontent(){contractcontent("omitnothing")selectedItem=getselectedItem()selectedComponents=selectedItem.split("|")for (i=0; i<selectedComponents.length-1; i++)document.getElementById(selectedComponents[i]).style.display="block"}function revivestatus(){var inc=0while (statecollect[inc]){if (ccollect[inc].style.display=="block")statecollect[inc].innerHTML=contractsymbolelsestatecollect[inc].innerHTML=expandsymbolinc++}}function get_cookie(Name) { var search = Name + "="var returnvalue = "";if (document.cookie.length > 0) {offset = document.cookie.indexOf(search)if (offset != -1) { offset += search.lengthend = document.cookie.indexOf(";", offset);if (end == -1) end = document.cookie.length;returnvalue=unescape(document.cookie.substring(offset, end))}}return returnvalue;}function getselectedItem(){if (get_cookie(window.location.pathname) != ""){selectedItem=get_cookie(window.location.pathname)return selectedItem}elsereturn ""}function saveswitchstate(){var inc=0, selectedItem=""while (ccollect[inc]){if (ccollect[inc].style.display=="block")selectedItem+=ccollect[inc].id+"|"inc++}document.cookie=window.location.pathname+"="+selectedItem}function do_onload(){uniqueidn=window.location.pathname+"firsttimeload"var alltags=document.all? document.all : document.getElementsByTagName("*")ccollect=getElementbyClass(alltags, "switchcontent")statecollect=getElementbyClass(alltags, "showstate")if (enablepersist=="on" && ccollect.length>0){document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0" firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page loadif (!firsttimeload)revivecontent()}if (ccollect.length>0 && statecollect.length>0)revivestatus()}if (window.addEventListener)window.addEventListener("load", do_onload, false)else if (window.attachEvent)window.attachEvent("onload", do_onload)else if (document.getElementById)window.onload=do_onloadif (enablepersist=="on" && document.getElementById)window.onunload=saveswitchstate</script>
Deveria funcionar como está neste site: http://www.dynamicdrive.com/dynamicindex17/switchcontent.htm

 

Há alguma solução para isto?

 

 

Nuno Amaral

Cumprimentos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. A solução é fazer do jeito certo e abolir scripts inline no documento.Procure colocar TODOS os scripts em um arquivo js separado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. A solução é fazer do jeito certo e abolir scripts inline no documento.Procure colocar TODOS os scripts em um arquivo js separado.

MICOX, NÃO FUNCIONOU.Pus o script num .js separado mas não deu nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas não deu nada.

"nao deu em nada" é algo muito amplo.Especifique.Abra o console de erros do FF ou algo parecido. Dê uns alerts aí.enfim: tente descobrir a origem do erro. Se funcionou pro alert não tem porque não funcionar pra outro script.O problema não deve ser com a função extraiScript.

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.