Article View: pl.comp.lang.javascript
Article #39199[ajax] progressbar
From: Łucio
Date: Sat, 25 Mar 2006 11:22
Date: Sat, 25 Mar 2006 11:22
84 lines
3157 bytes
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-mailShow 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