🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #39199

[ajax] progressbar

#39199
From: Łucio
Date: Sat, 25 Mar 2006 11:22
84 lines
3157 bytes
Witam,

W ramach nauki js staram się zrobić progressbar, pojawiający się podczas  
uploadowania pliku na serwer. W tym celu co 2000ms sprawdzam wielkość  
wysyłanego pliku. Nie wiedziałem czemu skrypt wieszał mi przeglądarki,  
dlatego wstawiłem sobie zmienną i, którą inkrementuję podczas każdego  
wywołania funkcji triggered() gdy mam readyState = 4 i status = 200. Nie  
wiem czemu podczas pierwszego wywołania i przyjmuje wartość 3, potem 4, 6,  
10, 18, 34, 66, ... po czym przeglądarka się wiesza.
Mógłby rzucić okiem na poniższy kod i podpowiedzieć co robię źle?

plik test.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"  
dir="ltr">
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<script src="ajax.js" type="text/javascript"></script>
</head>
<body>
<div id="output" onclick="makeRequest('test.php')">click here</div>
</body>
</html>



plik test.php:

<?php
function checkSize()
{
     echo sprintf("%u", filesize('uploadedFile.txt'));
}
checkSize();



plik ajax.js:

var http_request = false;
function makeRequest(url) {
     http_request = false;

     if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
     } else if (window.ActiveXObject) { // IE
         try {
             http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
             try {
                 http_request = new ActiveXObject("Microsoft.XMLHTTP");
             } catch (e) {}
         }
     }

     if (!http_request) {
         alert('Poddaję się :( Nie mogę stworzyć instancji obiektu  
XMLHTTP');
         return false;
     }

     http_request.onreadystatechange = triggered;
     http_request.open('GET', url, true);
     http_request.send(null);
}
var i = 0;
function triggered() {
     if (http_request.readyState == 4) {
         if (http_request.status == 200) {
             document.getElementById("output").innerHTML = '<br />'  
+ http_request.responseText + '<br />' + i++;
             setInterval( "triggered()", 2000 );
         } else {
             alert('Wystąpił problem z zapytaniem.');
         }
     }
}


-- 
pozdrawiam,
Łucio
Technical Details
Message-ID: <op.s6yu73fh6bm6q9@hp.mshome.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: Łucio <lucioj@skasuj.poczta.onet.pl>
Newsgroups: pl.comp.lang.javascript
Subject: [ajax] progressbar
Date: Sat, 25 Mar 2006 12:22:41 +0100
Organization: Onet.pl
Lines: 84
Message-ID: <op.s6yu73fh6bm6q9@hp.mshome.net>
NNTP-Posting-Host: 213-238-117-32.adsl.inetia.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1143285763 30776 213.238.117.32 (25 Mar 2006 11:22:43 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Sat, 25 Mar 2006 11:22:43 +0000 (UTC)
X-Sender: X2i4bNW81k0YFRYUtDltG4gUA8ezoqCb
User-Agent: Opera M2/8.50 (Win32, build 7700)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit