Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Problem med AJAX lösning...

Postades av 2008-10-23 09:58:46 - Robert Åström, i forum javascript/dhtml, Tråden har 5 Kommentarer och lästs av 1347 personer

Är ingen hejare på Javascript och skulle behöva hjälp med en Ajax-applikation som jag kört fast med. Har mest programmerat ASP genom åren så jag skulle behöva lite hjälp här. Tanken är att default.asp visar upp en siffra för användarna. I den kod jag snickrat ihop så plockar scriptet detta värde från sidan time.asp som innehåller följande kod.

response.expires=-1
response.write(värde)


Tanken är att variabeln värde ska hämtas av sidan från en databas, och att sidan default.asp ska hämta upp värdet i realtid direkt värdet ändras i databasen. Har testat det så att jag helt enkelt har skrivit in ett nytt värde innaför parentesen ovan (värde) och helt enkelt sparat ner för att simulera en värdeändring från databas. DÅ har det fungerat tack vare att jag lagt en ständig koll mot sidan via SetTimeout i default.asp.

Problemet som uppstår är att den ständiga kollen mot time.asp käkar upp allt minne på kilentsidan, så det här är inte rätt metod, även om funktionen i sig är rätt när man som snvändare är inne på sidan. Nu hämtar ju default.asp upp data från time.asp hela tiden och däri ligger problemet med att minnet tar slut. Den rätta lösningen vore ju att det skickades data direkt till default.asp istället när en ändring av värdet sker. Någon sorts trigger eller nåt som ändrar värdet i realtid på klientsidan utan uppdatering av sidan. Kan någon kunnig visa hur jag kan göra detta med ASP, Javascript och Ajax?

Koden i default.asp ser ut som nedan. Tack på förhand!

<html>
<body>
<script type="text/javascript">
function ajaxFunction()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }	
    xmlHttp.onreadystatechange=function()
      {
      if(xmlHttp.readyState==4)
        {
        document.myForm.time.value=xmlHttp.responseText;
        }
      }
    xmlHttp.open("GET","time.asp",true);
    xmlHttp.send(null);
  }
</script>
<script>
	function test() {
	ajaxFunction();
	setTimeout("test()", 0000);
}
</script>
<script>
	test();
</script>
<form name="myForm">
	Time: <input type="text" name="time" />
</form>
</body>
</html>


Svara

Sv: Problem med AJAX lösning...

Postades av 2008-10-23 11:26:22 - Oskar Johansson

Hm, det du efterfrågar är inte riktigt möjligt på något _bra_ sätt i HTTP, beroende på vad man nu säger är bra dvs.. Problemet är att du endast kan få till en anslutning från klient till server, där klienten frågar någonting och servern svarar. Om servern vill skicka någonting till klienten så måste klienten först ha frågat efter det.

Nu till det intressanta: Om klienten skapar en anslutning med _lång_ timeout till servern, och servern struntar i att svara på ett tag, ända tills att antingen timeouten är på väg att gå ut, eller tills att det man väntar på har hänt (t.ex. att ditt värde har uppdaterats) så kan man "emulera" att servern skickar till klienten.

Problemet: Klassiska webbservrar har problem med det där, de klarar inte av att hantera så många anslutningar samtidigt (även om majoriteten av anslutningarna bara ligger och väntar och faktiskt inte gör någonting.) Men t.ex. webbservern jetty (för java vill jag minnas) och IIS 7.0 (med asp.net) klarar av det. Där är det inga problem att göra sådana här applikationer. Men i gammal möglig asp är det lite tunt utbud..


Svara

Sv:Problem med AJAX lösning...

Postades av 2008-10-23 11:38:32 - Robert Åström

Ok, tack för svar!
Om man skulle göra det med ASP.NET och IIS7, hur skulle den här enkla funktionen se ut då?


Svara

Sv: Problem med AJAX lösning...

Postades av 2008-10-23 12:53:43 - Oskar Johansson

Du skulle få skapa en sida på servern som pausar sig själv tills ett event har körs (typ manualresetevent eller liknande), eller en timeout har gått. (Någon wait-grej, tråden ska inte köras är hela poängen.) Sedan måste du någonstans ha kod som triggar eventet, typ kod som har koll på databasen. Den skulle troligtvis inte ligga på samma sida, utan i typ någon httpmodule eller liknande.

Fulast är att "polla" databasen (gå å frågan den lite då och då om något hänt), finare är att skapa någon form av "trigger" i databasen som asp.net kan reagera på. (Om det är den här applikationen som uppdaterar i databasen är det dock enklare, egentligen är det då inte intressant att veta när databasen har blivit uppdaterad utan när applikationen har uppdaterat databasen. Och det vet ju applikationen.)

Klienten behöver sedan bara skapa ett anrop till den här sidan, och när den returnerar så kollar den om det var en timeout eller inte, om det inte var det så gör den någonting vettigt med resultatet. Sedan skapar den ånyo ett nytt anrop mot servern, och håller på så i all evighet.

Knöligt att förklara, men poängen är att man vill minimera antalet trådar som exekverar. (En anslutning som inte har något att exekvera behöver ingen tråd, bara lite minne. Så fort den börjar exekvera någonting, t.ex. att kolla i en databas, så behövs dock en tråd, och det är fy-fy. Bättre då att databasen säger till när någonting har hänt)


Svara

Sv: Problem med AJAX lösning...

Postades av 2008-10-23 14:07:20 - Ola Lindfeldt

Största problemet i scriptet måste vara den här raden:

setTimeout("test()", 0000)

0 ms delay! alltså du pollar maximalt mycket, med minimal delaytid, hela tiden, utan slut..
Inte alls bra. Dessutom anropas en function som gör
xmlHttp=new XMLHttpRequest();
Dvs du skapar ett nytt ActiveX-objekt oändligt antal gånger i en loop med 0 ms mellanrum.
(dvs så fort som klientdatorn orkar med). Inte konstigt att det blir problem.

Det borde räcka fint att du pollar sådär 3 ggr/sekund?

Skriv då:
var x = setTimeout("test()", 333) // vänta 0,333 sek

// (var x = innebär att det ska köras i bakgrunden!)

OCH framför allt: Skapa inte en NY xmlHttp=new XMLHttpRequest();
var n:te millisekund.. Utan lägg det utanför funktionen som du loopar här.
Det räcker ju att du har EN st xmlHttp-instans på sidan.


Svara

Sv:Problem med AJAX lösning...

Postades av 2008-10-29 23:15:36 - Robert Åström

Tack för era svar!
Nu har jag fått bra förklaringar på vad som är problemet och hur jag kan göra detta på bästa sätt.


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 616
27 958
271 741
9 652
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies