[Javascript] location.href en php file download

Pagina: 1
Acties:
  • 222 views sinds 30-01-2008
  • Reageer

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Als ik vanuit javascript een URL aanroep, een php script dat m.b.v. headers & data een file naar de client stuurt, dan gaat dit mis.

Concreet voorbeeld:

ik heb een tabel:
code:
1
2
3
4
5
<table border=0>
  <tr onClick="location.href='downloadfile.php'">
    <td>klik op deze row</td>
  </tr>
</table>


Als ik het script vanuit een
code:
1
<a href='downloadfile.php'>test</a>

aanroep, gaat het wel goed. Als ik echter op de tr in het eerste blokje code klik, krijg ik netjes het "Bestand downloaden" venster. Echter, als ik dan op "ok" klik, dan krijg ik een foutmelding:

Internet Explorer kan deze website niet openen. De gevraagde website is niet beschikbaar of kan niet worden gevonden. Probeer het later opnieuw.

Deze fout krijg ik consequent van internet explorer (versie 5.0, 5.5, 6.0) op verschillende computers, en dus enkel als ik de url aanroep vanuit javascript.

Weet iemand hier een workaround voor? Ik ga zelf aan het spelen met een dynamische iframe denk ik, om te zien of dat wel werkt, maar dat vind ik nogal ranzig.

Overige info: alle geteste computers draaien op windows 2000 >= SP3, met IE 5.0, 5.5 of 6.0;

  • Johnny
  • Registratie: December 2001
  • Laatst online: 21-08 11:56

Johnny

ondergewaardeerde internetguru

Wat is er mis met gewoon een link naar het bestand maken? Als je toch met onclick werkt?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Johnny: wat bedoel je? Kun je pseudocode geven, zodat het wat duidelijker is wat je bedoelt?

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 15-07 20:09

dArtagnan

Een voor allen, allen voor een

Je kunt toch gewoon met een link naar een bestand downloadfile.php verwijzen en dan in het bestand de download aanroepen. Ik neem niet aan dat je wilt dat mensen downloadfile.php dowloaden.

En wat Johnny bedoelt: onClick="location.href='bestandomtedownloaden.exe'"

Verwijderd

uhm ..
het is toch :

document.location="blabka.exe"

of niet ?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:22

crisp

Devver

Pixelated

Verwijderd schreef op 09 augustus 2003 @ 18:31:
uhm ..
het is toch :

document.location="blabka.exe"

of niet ?
nee, het is document.URL (read-only) of window.location waarvan href de default property is die je set. document.location mogen ze wat mij betreft de deur uitgooien, het is bij god's gratie dat het nog werkt in de meeste browsers...

Intentionally left blank


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Ik genereer in het PHP script content (een database export o.a.), vandaar dat ik niet direct naar een file kan linken. Het lijkt erop dat IE echt een muisklik moet hebben om de een of andere reden...

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 07-08 00:50

WPN

heb je al geprobeert er onClick="javascript:location.href='downloadfile.php'" van te maken?

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

B-Man schreef op 09 augustus 2003 @ 18:51:
Ik genereer in het PHP script content (een database export o.a.), vandaar dat ik niet direct naar een file kan linken. Het lijkt erop dat IE echt een muisklik moet hebben om de een of andere reden...
Dat lijkt me onzin; maar je weet het nooit met IE... Heb je al echte browsers gebruikt waarin je eventueel wat debugging kan doen? Wat zeggen je access logs :? Zit er verschil tussen beiden verzoeken?

[ Voor 5% gewijzigd door Spider.007 op 09-08-2003 19:04 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 15-07 20:09

dArtagnan

Een voor allen, allen voor een

B-Man schreef op 09 August 2003 @ 18:51:
Ik genereer in het PHP script content (een database export o.a.), vandaar dat ik niet direct naar een file kan linken. Het lijkt erop dat IE echt een muisklik moet hebben om de een of andere reden...
Kun je niet een pop-up open met daarin het php-bestand, dan start vanuit de pop-up de download.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:22

crisp

Devver

Pixelated

B-Man schreef op 09 augustus 2003 @ 18:51:
Ik genereer in het PHP script content (een database export o.a.), vandaar dat ik niet direct naar een file kan linken. Het lijkt erop dat IE echt een muisklik moet hebben om de een of andere reden...
check je de referrer soms in je script?

Intentionally left blank


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Spider.007: access log toont geen verschil in aanvragen

Koraalduivel: ja, dat kan natuurlijk, maar dat creeert weer wat ranzige code. Het gaat niet om een script, maar om meerdere scripts. Ik kan de popup wel openen, maar dan moet ik na de download op de een of andere manier de popup weer sluiten. Code die er eigenlijk niets mee te maken heeft.

crisp: nee, dat niet. Werk wel met sessies. Kan het zijn dat IE de session-id cookie niet doorgeeft? Het gaat namelijk om een beveiligd script: ik controleer enkele sessie variabelen en database gegevens op geldigheid. Als de gegevens niet kloppen wordt er een redirect header verzonden... Daar zou het probleem kunnen zitten...

--edit

Al bedenk ik me net dat het niet aan de sessie kan liggen, aangezien de download-headers pas verzonden worden na de sessie-validatie, en ik wel netjes een "Bestand downloaden" venster krijg, wat inhoud dat de headers goed doorkomen.

Morgen nog maar wat meer testen. Heb in ieder geval weer wat ideeen.

Oh, en peluso: onClick is een javascript event, wat inhoud dat ik direct javascript code in kan geven. In een handler die een url verwacht kun je "javascript:" gebruiken om IE te melden dat er javascript code verwerkt dient te worden.

[ Voor 29% gewijzigd door B-Man op 10-08-2003 00:22 ]


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Ben iets wijzer geworden inmiddels, echter nog geen oplossing.
Als ik de link in een nieuw browservenster plak, met de PHPSESSID eraan geplakt (ja, op een correcte manier), krijg ik dezelfde foutmelding van IE.

Mijn HTTPD access log geeft in alle gevallen netjes een code 200 aan, wat betekent dat de data netjes naar de client gestuurd wordt. Het lijk dus aan IE te liggen.
Zal morgen opera eens installeren, om te zien of het daar ook misgaat.

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Heb een werkende oplossing: vond via google in een nieuwsgroep wat info over cache problemen met IE, en vond een link naar wat info hierover op de php site:

http://www.php.net/manual...session-cache-limiter.php

Het is op te lossen door als eerste regel in mijn script
PHP:
1
session_cache_limiter('public');

te zetten.

Pfff, ik zat al een jaar tegen dit probleem aan te hikken, eindelijk een oplossing ;)

  • creative8500
  • Registratie: September 2001
  • Laatst online: 03-01 16:54

creative8500

freedom.

Maar: waarom gebruik je geen link? Wanneer je die <td> en <a> met CSS opmaakt kun je precies hetzelfde bereiken. Onclick-linkjes zijn net zo fout als font-tags :)

  • B-Man
  • Registratie: Februari 2000
  • Niet online
creative: omdat ik een groter gebied dan enkel de link-tekst aanklikbaar wil maken. Ik heb een menubar die opgemaakt wordt vanuit een DHTML behavior (site is IE only, webapp).
Pagina: 1