webForumDet fria alternativet

Flash + ASP.NET = realtidschatt

Flash

4 svar · 528 visningar · startad av xrobx

Medlem sedan mars 2003106 inlägg
Frågan#1

Hej!

Jag håller på att fixa med en chattfunktion till en hemsida,
denna är en sk. "realtidschatt" dvs. att chatt-texten
uppdateras löpande utan att själva användarinterfacet behöver uppdateras.

Nu till mitt problem.
Jag har valt att skriva diverse ASP.NET kod för att sköta själva införandet/hämtandet av chatt-meddelanden
till/från en vanlig textfil.
Flash-interfacet läser sedan med hjälp av loadVariables() funktionen in
den text som har skrivits till textfilen.

Allt detta fungerar utmärkt så länge jag kör lokalt på min webserver (localhost).
Men efter att jag har tankat upp sakerna till mitt webhotell så vill inte Flash-interfacet fungera som tänkt.
Flashen laddar alltså inte in texten från textfilen.

Följande kod finns på Frame 1 i Flashen:

loadVariablesNum("rettext.aspx",0, "POST");

Jag vet att det inte är något problem med variabelnamn då allt detta fungerar när jag kör lokalt som sagt.

Det jag börjar misstänka är att Flash inte "hinner" snappa upp den returnerade texten från "rettest.aspx",
utan bara swichar förbi till nästa frame som om ingenting hade hänt :q Då jag kör lokalt så kanske processen
är så pass snabb att Flashen helt enkelt hinner få tag i texten?..

Detta är som sagt ett mysterium!
Således; Är det någon som vet hur man kan få Flash att "vänta" på svaret från rettext.aspx?

Mycket tacksam för svar! :bire

Medlem sedan juni 200546 inlägg
#2

Antagligen är det som du misstänker, att det tar lite tid innan värdena uppdateras.

En sak du kan göra är att kontenuerligt uppdatera ditt textfält via onEnterFrame eller setInterval.

Det jag föreslår dock, är att inte använda loadVariables eller loadVariablesNum överhuvudtaget. Det är gamla funktioner som är påväg ut. De ger heller inte speciellt stora möjligheter när det kommer till att känna av olika händelser.

Titta istället på loadVars. Nedan följer ett exempel på hur det kan användas:

var myLv:LoadVars = new LoadVars();
myLv.onLoad = function ( success:Boolean ) 
{
    if  ( success )
    {
    trace ( this.toString() );
    }
    else
    {
    trace ( "Error" );
    }
};
myLv.load( "http://www.somedomain.com/somefile.aspx" );

Notera att det finns många fler händelser / metoder / egenskaper i LoadVars klassen du kan dra nytta av.

Medlem sedan mars 2003106 inlägg
#3

Tack så mycket för ditt svar! Nu fungerar det betydligt bättre :bire

Nästa problem som jag har stött på är att textrutan i Flash blinkar till
efter att jag "loopar" laddningen från textfilen.
Jag vet inte om jag gör detta på rätt sett, du skriver att jag kan köra med
"onEnterFrame eller setInterval". Frågan är bara hur jag gör det? (jag är riktig n00b på Flash :r )

Det jag gör nu för att uppdatera textrutan är följande:

På Frame 1 har jag din kod:

var myLv:LoadVars = new LoadVars();
myLv.onLoad = function ( success:Boolean ) 
{
    if  ( success )
    {
    	txtMain.htmlText=this.text;
	txtMain.scroll=txtMain.length; //scrolla automatiskt till botten
    }
};
myLv.load( "rettext.aspx?mrnd="+random(100000) );

Sedan på Frame 15 har jag:

gotoAndPlay(1);

Jag antar att man kan använda dina "onEnterFrame eller setInterval" i stället.
Vore toppen om du kan ge ett exempel på det också :)

Än en gång, tack! :birp

Medlem sedan mars 2003106 inlägg
#4

Hej igen alla glada.

Problemet är nu löst efter en del trixande.

Fungerande kod:

var oLen = new Number;
function LoadAll  () {

	var myLv:LoadVars = new LoadVars();
	myLv.onLoad = function ( success:Boolean ) 
	{
		if  ( success )
		{
			if (length(this.text) > oLen) {
				oLen = length(this.text);
				
				txtMain.htmlText=this.text;
				txtMain.scroll=txtMain.length;
			}
		}
	};
	myLv.load( "rettext.aspx?mrnd="+random(1000000) );
}
timer = setInterval(LoadAll, 1000);

:birp

Medlem sedan juni 200546 inlägg
#5

Trevligt att det löste sig!

Hittade ett litet fel i din kod dock, något som kompilatorn borde ha gnällt om. Istället för att skriva:

var oLen = new Number;

skriv:

var oLen:Number = new Number();

eller:

var oLen:Number = 0;

Funktionen length är på väg bort från Actionscript. Istället rekommenderar Macromedia (Adobe) att använda metoden length på sträng objektet:

oLen = this.text.length;

Detaljer, men kanske är kul att känna till. Lycka till!

315 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
176 ms — hämta tråd, inlägg och bilagor (db)
136 ms — ändringar (db)