Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Mai 22, 2024 10:16

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: textfiles [JS]
BeitragVerfasst: Mo Jan 07, 2013 17:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Wie kann ich in JS textfiles lesen, die sich nicht auf dem Rechner des Anwenders befinden? Also konkret in etwa dort, wo sich auch die html-seite befindet. MDN sagt dazu nichts, außer dass dazu derzeit keine Information zur Verfügung steht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Mo Jan 07, 2013 17:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Ich gehe davon aus, dass du eine Website entwickelst (also kein server-seitiges JS hast). Du müsstest hier einen Server bereitstellen, welcher JSON-Ajax-Requests annimmt, also den Dateiinhalt JSON-Codiert und an dein Script sendet. ZB. in PHP:
Code:
  1. echo json_encode(array("data"=>file_get_contents(Pfad zur Datei)));

Du musst bei Ajax auf die Same origin policy achten (welche man auch bedingt abstellen kann). Außerdem macht JQuery Ajax-Requests meiner Meinung nach wesentlich einfacher zu handhaben, da man sich nicht mit den einzelnen Browsern herumschlagen muss (http://api.jquery.com/jQuery.ajax/).
Code:
  1.  
  2.     $.ajax({
  3.       url : "http://DeineURL",
  4.       type : "GET",
  5.       dataType : "json",
  6.       data : data,
  7.       success : callback,
  8.       error: errCallback,
  9.       crossDomain : true
  10.     });
  11.  


Die Methode callback enthält dann als ersten Parameter das JSON Object

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Mo Jan 07, 2013 19:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also mit JSON und Ajax hat das erstmal nichts zu tun. Du musst einfach einen HTTP-Request in JavaScript machen.
http://de.wikipedia.org/wiki/XMLHttpRequest

Ajax ist nur eine Technik die darauf aufbaut. JSON ist ein Datenformat welches vom Browser sehr schnell gelesen werden kann (schneller als XML) und gerne verwendet wird um dynamsiche Daten nachzuladen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Di Jan 08, 2013 06:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Ich gehe davon aus, dass du eine Website entwickelst
Korrekt.

Zitat:
Du musst einfach einen HTTP-Request in JavaScript machen.
dazu hätte ich jetzt einige weitere Fragen. Momentan sieht das ganze (gekürzt) etwa so aus:
Code:
  1.  
  2. var delay = 0;
  3. function loadText(filename, target) {
  4. var xmlHttp = null;
  5. ++delay;
  6. //...
  7. xmlHttp.onreadystatechange = function () {
  8.     if (xmlHttp.readyState == 4) {
  9.         --delay;
  10.         if (delay === 0) {
  11.             target = xmlHttp.responseText;
  12.             draw();
  13.         }
  14.     }
  15. }
  16.  

dass das so nicht funktionieren kann, ist klar.
1) müsste target ein out parameter sein (geht sowas in JS? wie?) ([s]notfalls kann ich natürlich auch zur Laufzeit den Funktionstext anpassen[/s] nein, geht nicht, weil target (also die variable auf die es verweisen sollte) nicht im scope liegt)
2) schätze ich, wird delay nicht im scope sein (wobei ich daraus einfach nur eine globale Variable machen müsste, wenn’s stimmt).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Di Jan 08, 2013 10:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich glaube dir ist nicht ganz klar was mit xmlHttp.onreadystatechange passiert. Es handelt sich da um eine Callback-Funktion. Diese wird aufgerufen, sobald die Antwort zum Request vom Server kommt. Du solltest NICHT die Skriptausführung blockieren solange du wartest! Dann wird potentiell der ganze Browser hängen oder zumindest der entsprechende Tab im Browser. Einige Browser (z.B. Firefox) killen auch deinen JavaScript-Code , wenn er zu lange braucht!

=> Also ein loadText wie du es haben willst ist eine schlechte Lösung für einen asynchronen Vorgang.

P.S. Immer daran denken das so ein Request auch fehlschlagen kann. Also xmlHttp.status prüfen! ( http://de.wikipedia.org/wiki/HTTP-Statuscode )

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Di Jan 08, 2013 16:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Coolcat hat geschrieben:
Ich glaube dir ist nicht ganz klar was mit xmlHttp.onreadystatechange passiert. Es handelt sich da um eine Callback-Funktion. Diese wird aufgerufen, sobald die Antwort zum Request vom Server kommt. Du solltest NICHT die Skriptausführung blockieren solange du wartest! Dann wird potentiell der ganze Browser hängen oder zumindest der entsprechende Tab im Browser.


Mal abgesehen davon das JS immer Single Thread ist und das callback niemals ausgeloest werden wuerde.

Achja noch ein Tipp: manche Browser (BIRNE) halten sich nicht an den Standard und fordern ein Explizites "Cache-Control: no-cache, must-revalidate"

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Di Jan 08, 2013 16:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
yunharla hat geschrieben:
Achja noch ein Tipp: manche Browser (BIRNE) halten sich nicht an den Standard und fordern ein Explizites "Cache-Control: no-cache, must-revalidate"

Wofür?

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Di Jan 08, 2013 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Lord Horazont hat geschrieben:
yunharla hat geschrieben:
Achja noch ein Tipp: manche Browser (BIRNE) halten sich nicht an den Standard und fordern ein Explizites "Cache-Control: no-cache, must-revalidate"

Wofür?


Ich hatte ohne das Problem das er sich selbst solche Sachen wie 404 ( :roll: ) gemerkt hat.... gibt also ne ganze Reihe von möglichen Problemen. Kam damals mit I-Schrott 6 <.<

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Di Jan 08, 2013 20:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das ist doch auch (teilweise) erlaubtes Verhalten, laut HTTP spec:
RFC 2616, Section 13.2.2 hat geschrieben:
13.2.2 Heuristic Expiration

Since origin servers do not always provide explicit expiration times,
HTTP caches typically assign heuristic expiration times, employing
algorithms that use other header values (such as the Last-Modified
time) to estimate a plausible expiration time. The HTTP/1.1
specification does not provide specific algorithms, but does impose
worst-case constraints on their results. Since heuristic expiration
times might compromise semantic transparency, they ought to used
cautiously, and we encourage origin servers to provide explicit
expiration times as much as possible.

Zusammen mit
RFC 2616, Section 13.1.1 hat geschrieben:
13.1.1 Cache Correctness

A correct cache MUST respond to a request with the most up-to-date
response held by the cache that is appropriate to the request (see
sections 13.2.5, 13.2.6, and 13.12) which meets one of the following
conditions:
[…]
2. It is "fresh enough" (see section 13.2). In the default case,
this means it meets the least restrictive freshness requirement
of the client, origin server, and cache (see section 14.9); if
the origin server so specifies, it is the freshness requirement
of the origin server alone.

If a stored response is not "fresh enough" by the most
restrictive freshness requirement of both the client and the
origin server, in carefully considered circumstances the cache
MAY still return the response with the appropriate Warning
header (see section 13.1.5 and 14.46), unless such a response
is prohibited (e.g., by a "no-store" cache-directive, or by a
"no-cache" cache-request-directive; see section 14.9).

Ist es einem Client bei fehlenden Headern durchaus erlaubt, eine nicht-aktuelle Response zurückzuliefern, falls kein Last-Modified und/oder Expires und/oder ETag-Header gesetzt wurden. Wenn Last-Modified oder ETag gesetzt wurden, sollte nach einer gewissen Zeit revalidiert werden (aber auch nicht sofort, selbst mit must-revalidate nicht!)

404 darf man sich aber nicht merken:
RFC 2616, Section 13.4 hat geschrieben:
A response received with a status code of 200, 203, 206, 300, 301 or
410 MAY be stored by a cache and used in reply to a subsequent
request, subject to the expiration mechanism, unless a cache-control
directive prohibits caching. However, a cache that does not support
the Range and Content-Range headers MUST NOT cache 206 (Partial
Content) responses.

A response received with any other status code (e.g. status codes 302
and 307) MUST NOT be returned in a reply to a subsequent request
unless there are cache-control directives or another header(s) that
explicitly allow it. For example, these include the following: an
Expires header (section 14.21); a "max-age", "s-maxage", "must-
revalidate", "proxy-revalidate", "public" or "private" cache-control
directive (section 14.9).


Ich hoffe ich hab nichts übersehen. Und ich mache jetzt auch schluss mit diesem off-topic ;). Hier nochmal die Referenz: RFC 2616.

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Do Jan 10, 2013 11:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Es handelt sich da um eine Callback-Funktion.
Ach nein wirklich? Ich habe übrigens exakt das getan, was du im Post davor vorgeschlagen hast, nur dass ich den Text benutzen will und nicht in einem alert-Fenster ausgeben, was dazu führt, dass ich ihn in irgendeine variable schreiben muss. In Delphi zumindest würde dasselbe übrigens einwandfrei funktionieren, wären lokale Variablen wie in JS nachwievor verfügbar, wenn die Funktion fertig ist (und wenn es single-threaded ist, dann auch unter der Vorraussetzung, dass das Programm irgendwann idle t oder Application.ProcessMessages aufruft).

jetzt benutze ich ein Objekt (sinnvoller so, schätze ich), es funktioniert aber nachwievor nicht.
Code:
  1. function TextFile(src) {
  2.     var xmlHttp = null;
  3.     this.text = "";
  4.     this.onfinished = function() {alert("onfinished was not initialized")}
  5.     try {
  6.         // Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
  7.         xmlHttp = new XMLHttpRequest();
  8.     } catch(e) {
  9.         try {
  10.             // MS Internet Explorer (ab v6)
  11.             xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
  12.         } catch(e) {
  13.             try {
  14.                 // MS Internet Explorer (ab v5)
  15.                 xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
  16.             } catch(e) {
  17.                 xmlHttp  = null;
  18.             }
  19.         }
  20.     }
  21.     if (xmlHttp) {
  22.         xmlHttp.open('GET', src, true);
  23.         xmlHttp.onreadystatechange = function () {
  24.             if (xmlHttp.readyState == 4) {
  25.                 this.text = xmlHttp.responseText;
  26.                 this.onfinished();  //--------------------------------------------------------------------------------this.onfinished is not a function (wieso?)
  27.             }
  28.         };
  29.         xmlHttp.send(null);
  30.     }
  31. }


übrigens, wieso wird ein Textfile beim Laden auf Syntaxfehler überprüft? Ist es so abwegig, dass ich in einem Textfile einfach Text habe?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Do Jan 10, 2013 14:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Die Callback Funktion wird vom XMLHttp-Objekt aufgerufen und steht deshalb, anstatt deinem Objekt, in "this". (Das kannst du prüfen indem du einfach "console.log(this);" in die Callback Funktion schreibst :wink: ). Eine Möglichkeit wäre, das Objekt vorher zu sichern "xmlHttp.obj=this;" und dann "this.obj.onFinished()" in onreadystatechange aufzurufen.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Do Jan 10, 2013 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ok, bleibt noch die Prüfung auf Syntaxfehler im Textfile. Wie schalte ich die aus, bzw umgehe sie?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Do Jan 10, 2013 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das ist ein XMLHttpRequest… Ich habe zweifel, dass du dem das interpretieren als XML abgewöhnen kannst… Also gieß deinen Text doch einfach in ein XML-Dokument mit einer Node, die nur Text enthält.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: textfiles [JS]
BeitragVerfasst: Mo Jan 14, 2013 11:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ich soll aber ein Textfile laden.

von wo anders hab ich den Tipp bekommen, dass ich dazu ein iframe benutzen kann. Funktioniert aber auch nicht wie gewünscht.
Code:
  1.  
  2. <iframe  id="hiddenContent" width="100" height="100" style="position:absolute;visibility:hidden;" ></iframe>
  3. //…
  4. var srcFrame = document.getElementById("hiddenContent");
  5.  
srcFrame ist danach null.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]