[JS] Wachten op readyState 4*

Pagina: 1
Acties:

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 12-10 08:33
Hallo,

Ik ben bezig aan een AJAX-toepassing om alle afbeeldingen van mijn site te halen.
Echter wilt deze niet wachten tot het bestand helemaal binnen is, en krijg ik slechts 5kb van de afbeelding, terwijl de meeste rond de 100kb zitten.

Deze code werkt voor alle bestanden kleiner dan 5kb
code:
1
2
3
4
5
6
7
8
9
10
11
12
function getUrl( url , response)
{
    if ( response == null ) response = 'text';
    var http = createRequestObject();
    http.open("GET",url,false);
    // Bouw wachtfunctie tot hele bestand binnen is
    http.send();
    if ( response == 'text' )
        return http.responseText;
    else
        return http.responseBody;
}


Als de bestanden groter zijn, breekt hij de verbinding
ik heb op internet gezocht naar een oplossing, maar het wilt niet werken

code:
1
2
3
4
5
6
7
8
9
10
11
    if (http.readyState==4) {
        if (http.status==200){      // online!
            http.send();            // close connection
            if ( response == 'text' )
                return http.responseText;
            else
                return http.responseBody;
        }
        else if ( http.status==404 ) alert( "Error: offline / URL Broken" )
        else alert( "Status is " + xmlhttp.status )
    }


Als hij status 404 geeft zou ik ook graag het hele script willen afbreken

kunnen jullie me verder helpen?

http://www.softfocus.be/


  • Juup
  • Registratie: Februari 2000
  • Niet online
Wat ga je met dat plaatje in je XMLHttpRequest doen als het eenmaal geladen is?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik ben er wel eens tegen aan gelopen (grote response bleek maar half in de responseXML te zitten) en heb het toen zo opgelost:
JavaScript:
1
if (xmlReq.responseXML.normalize) xmlReq.responseXML.normalize();


Don't ask hoe ik er bij kom; lang geleden.

[ Voor 49% gewijzigd door RobIII op 14-06-2007 15:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • g4wx3
  • Registratie: April 2007
  • Laatst online: 12-10 08:33
Danku voor de snelle reply Roblll
Echter het hielp me niet verder.
@jaap, als ik de bestanden heb geladen bewaar ik ze op schijf.

Omdat het niet werkte wilde ik snel even een lite versie van het script op het forum zetten.
echter, nu ik heb de lite versie af, en nu werkt hij wel !

Ik ga het probleem onderzoeken nu, maar ik heb een vermoeden dat in het grote script ik ergens een foutje heb in mijn dynamisch gemaakte paden naar de afbeeldingen op mijn site, waardoor ik telkens het bannerscherm van de server inlaad en opsla (met de verkeerde extentie), Om dat te checken zal ik de afbeeldingen moeten open in kadblok, maar het script ligt er nu even uit.

hier is de code die van de lite versie:

Dit script moet je opslaan met de extentie .HTA en zal alleen werken op windows (ie 5.0+)


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<html>
<head>
<hta:application >
<meta http-equiv="content-type" content="text/html; charset=utf-8" >
<title>download voerentv</title>
<script type="text/javascript" src="container.js"></script>
<script type="text/javascript" src="app/net.js"></script>
</head> 
<body>
<div id="logdiv">
<button onclick="download()">update voerentv</button>
</div>
<script type="text/javascript">
function createRequestObject()
{
    var request;
    if(window.XMLHttpRequest)request = new XMLHttpRequest(); 
    else if(window.ActiveXObject) {
    var ie_versions = [
    "MSXML2.XMLHttp.5.0",
    "MSXML2.XMLHttp.4.0",
    "MSXML2.XMLHttp.3.0",
    "MSXML2.XMLHttp",
    "Microsoft.XMLHttp"
    ];
    for(var i=0; i <ie_versions.length; i++){
        try {request = new ActiveXObject(ie_versions[i]);}
        catch (error) {}
    }
    }
    return request;
}
function getUrl( url )
{
    var http = createRequestObject();
    http.open("GET",url,false);
    http.send();
    return http.responseBody;
}
function download()
{
    var sourcefile = 'http://infolab.uvt.nl/~remijn/telematica/scripties03/groep20/images/tweakers.jpg'
    var targetfile = 'tweakers.jpg'
    //Do request for file
    filesrc = getUrl( sourcefile )
    // load the request into stream
    var stream = new ActiveXObject("ADODB.Stream");
    stream.open();
    stream.type = 1;
    stream.write( filesrc );
    stream.position = 0;
    // Save stream to file
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    if ( fso.fileExists(targetfile) )fso.deleteFile(targetfile);
    stream.saveToFile(targetfile);
    stream.close();
    fso = stream  = filesrc = null;
}
</script>
</body> 
</html>



EDIT: Mijn vermoeden is bevestigd: ik krijg lelijke HTML code in plaats van de afbeelingbits.
Dat is dus die bannerpagina.
Toch bedankt, want ik was daar niet achtergekomen zou ik niet hier op het forum zijn gekomen

[ Voor 3% gewijzigd door g4wx3 op 14-06-2007 16:05 ]

http://www.softfocus.be/


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Zo zie je maar, het probleem isoleren geeft je vaker inzicht wat wel / niet werkt ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.