Ir para conteúdo

POWERED BY:

Arquivado

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

ZDarkness

[Resolvido] Ajax só carrega na segunda chamada

Recommended Posts

Quando chamo uma função com ajax, ela não funciona na primeira vez acionada(testada no firefox, acho que no Opera nem inicia). Tenho que iniciar a função 2 vezes para funcionar.

http://forum.dragonballzrpgonline.com/rpg/inicia.php?id

Conteúdo dessa página:

<?php
session_start();
$_SESSION['id']=10;
setcookie('id', '9', time()+3600);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Untitled Page</title>
</head>
<body>
<script type="text/javascript" src="luta.js"></script>
<span id="nomes"></span>
<span id="start"></span>
<span id="check"></span>
<span id="nomes1"></span>
<span id="estamina"></span>
<span id="count"></span>
<span id="tecnicas"></span>
<span id="login_senha"></span>
<div id="InlineFrame8"  onClick="begin()">inicio</div>
<div id="InlineFrame2"></div>
<div id="InlineFrame3"></div>
<div id="InlineFrame4"></div>
<span id="acao"></span></span>
</body>
</head>
</html>
Conteúdo da página acessada via ajax:

inicial.php

<?php
session_start();

if(!isset($_SESSION['id']))
die('Reconecte-se!');

$resultado='soco|chute';
$_SESSION['tecnicas']=$resultado;

exit('Ok*'.$resultado);
?>

Eu acredito que o problema esteja na sessão, pois na segunda vez que a função é chamada, ela inicia normalmente.

Mas deveria funcionar corretamente desde a primeira inicialização, certo?

 

Alguém poderia me informar o que está causando tal erro?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Percebi que existe uma espécie de lag que evita o funcionamento correto da função:

Parece que o ajax recebe a resposta mas demora transferir os dados.

Por isso dei uma alterada pra resposta iniciar antes.

 

Como era o código:

  function pegaAjax(){ //instancia um novo xmlhttprequest
                //baseado na getXMLHttpObj que possui muitas cópias na net e eu nao sei quem é o autor original
                if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
                var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
                for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
                return null;
        }
function getQueryString()
{
        var qs = window.location.search.substring(1).split('&');

        for (var i = 0; i < qs.length; i++) {
                qs[i] = qs[i].split('=');
        }

        return qs;
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

function uniqid()
          {
          var newDate = new Date;
          return newDate.getTime();
          }
	  
var querystring = getQueryString();	
var coookie=getCookie(querystring[0][0]);	
	ajaxini = new pegaAjax();
	function begin(){
document.getElementById("InlineFrame4").style.visibility = 'hidden';
document.getElementById("InlineFrame3").style.visibility = 'hidden';
document.getElementById("nomes1").style.visibility = 'hidden';
document.getElementById("tecnicas").style.visibility = 'hidden';
if(coookie!=""){
var urll='inicial.htm?'+uniqid();
	ajaxini.open("GET", urll, true);
    ajaxini.onreadystatechange=function(){
        if (ajaxini.readyState == 4){
		if (ajaxini.status==200 || window.location.href.indexOf("http")==-1){
            //Lê o texto
            var texto=ajaxini.responseText;
			texto=texto.replace(/\+/g," ");
            texto=unescape(texto);
			document.getElementById("check").innerHTML=texto;
			document.getElementById("count").innerHTML+=1;
}
}
}
ajaxini.send(null);
}
txt=document.getElementById("check").innerHTML.split('*');
if(txt[0] !== 'Ok'){
alert('Reconecte-se!');
}
else{
var all_tecnicas='';
var tecnicas=txt[1].split('|');
for(x=0; x<tecnicas.length; x++){
all_tecnicas+='<input type="radio" name="tecnicas" value="'+tecnicas[x]+'">'+tecnicas[x];
}
//Ponho as técnicas dele, onde elas tem que estar
document.getElementById("tecnicas").innerHTML=all_tecnicas;
document.getElementById("start").innerHTML=1; //carrega1('home.html');
//started();
}
}

Como está:

  function pegaAjax(){ //instancia um novo xmlhttprequest
                //baseado na getXMLHttpObj que possui muitas cópias na net e eu nao sei quem é o autor original
                if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
                var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
                for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
                return null;
        }
function getQueryString()
{
        var qs = window.location.search.substring(1).split('&');

        for (var i = 0; i < qs.length; i++) {
                qs[i] = qs[i].split('=');
        }

        return qs;
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

function uniqid()
          {
          var newDate = new Date;
          return newDate.getTime();
          }
	  
var querystring = getQueryString();	
var coookie=getCookie(querystring[0][0]);	
	ajaxini = new pegaAjax();
	function begin(){
document.getElementById("InlineFrame4").style.visibility = 'hidden';
document.getElementById("InlineFrame3").style.visibility = 'hidden';
document.getElementById("nomes1").style.visibility = 'hidden';
document.getElementById("tecnicas").style.visibility = 'hidden';
//var check='';  
txt=document.getElementById("check").innerHTML.split('*');
if(txt[0] !== 'Ok'){
alert('Reconecte-se!');
}
else{
var all_tecnicas='';
var tecnicas=txt[1].split('|');
for(x=0; x<tecnicas.length; x++){
all_tecnicas+='<input type="radio" name="tecnicas" value="'+tecnicas[x]+'">'+tecnicas[x];
}
//Ponho as técnicas dele, onde elas tem que estar
document.getElementById("tecnicas").innerHTML=all_tecnicas;
document.getElementById("start").innerHTML=1; //carrega1('home.html');
//started();
}
}

function is_player(){
var urll='inicial.htm?'+uniqid();
	ajaxini.open("GET", urll, true);
    ajaxini.onreadystatechange=function(){
        if (ajaxini.readyState == 4){
		if (ajaxini.status==200 || window.location.href.indexOf("http")==-1){
            //Lê o texto
            var texto=ajaxini.responseText;
			texto=texto.replace(/\+/g," ");
            texto=unescape(texto);
			document.getElementById("check").innerHTML=texto;
			document.getElementById("count").innerHTML+=1;
}
}
}
ajaxini.send(null);
}
if(coookie!=""){
is_player();
}

Espero que outros com problemas parecidos tenham uma noção de como corrigirem seu erro, assim.

Se alguém tiver outras boas dicas de como fazer para tudo funcionar corretamente, por favor, diga.

Também usei um while para checar e deu certo:

while(txt[0]==""){txt=document.getElementById("check").innerHTML.split('*');}
Mas pessoalmente não prefiro, porque deixa o código mais lento.

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.