TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07.07.2008, 18:44   #1 (permalink)
Overclocker
 
Benutzerbild von mokus
 

Registriert seit: 07.01.2005
Beiträge: 380

mokus ist zur Zeit noch ein unbeschriebenes Blatt

Standard Problem bei einem request unter Javascript

Hi,
ich habe ein Problem mit einer request Abfrage, in dieser rufe ich eine Datei mit einem bestimmten String aus den ich verarbeiten möchte. Nur jetzt habe ich das Problem das in der Funktion drin ein Syntax Fehler laut Firefox auftritt.

Beispiel:
Code:
Fehler: Syntax-Fehler
Quelldatei: http://www.lammpee.de/toolbar_inc/ar...p?archive=news
Zeile: 1, Spalte: 1
Quelltext:
Design Update Start*,*http://www.lammpee.de/archive,news,entry,4,1.html*;*...
Komischer weise funktioniert die ausgabe aber, wenn ich mitten in die Funktion die Variable mit dem enthaltenen String über ein Alert ausgeben lasse. Ab da an gibt es dann keine probleme mehr.

Funktion:
HTML-Code:
<script language="javascript" type="text/javascript">

var id_name;
var http_request;
var request_status
var request_content_v;

function request (url,id) {
        
        id_name = id;
        http_request = false;
        request_content_v = "";
        request_status = false;

        document.getElementById(id_name).value = "load...";
        
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // zu dieser Zeile siehe weiter unten
            }
        } 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('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
            return false;
        }
                
        http_request.onreadystatechange = request_content;
         
        http_request.open('GET', url, true);
        http_request.send(null);
                
        document.getElementById(id_name).value = request_content_v;
        
        return request_status;
        
    }
    

    function request_content () {

        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                request_content_v = http_request.responseText
                request_status = true;
            } else {
                alert('Bei dem Request ist ein Problem aufgetreten.');
                request_status = false;
            }
        }
          
    }

</script>
Wenn ich in dieser Funktion am Ende ein Alert reinbringe funktioniert es.
HTML-Code:
        http_request.onreadystatechange = request_content;
         
        http_request.open('GET', url, true);
        http_request.send(null);
        
        alert(request_content_v);
        
        document.getElementById(id_name).value = request_content_v;
        
        return request_status;
        
    }
Zitat:
Zitat von Lieutenant Commander Worf
Die Borg besitzen weder Ehre noch besitzen sie Mut – das ist unser größter Vorteil.

Geändert von mokus (08.07.2008 um 23:42 Uhr)
mokus ist offline   Mit Zitat antworten
Alt 07.07.2008, 21:37   #2 (permalink)
semi-diabolisch
 
Benutzerbild von [EID]-Mr.GiZMO
 

Registriert seit: 12.09.2005
Beiträge: 2.922

[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein

Standard AW: Problem bei einem request unter Javascript

Ich behaupte mal ganz frech, das liegt an der Verzögerung, die durch das Alert ausgelöst wird.

Ich würde versuchen dem Script an der stelle eine "Verschnaufpause" zu gönnen, bis id_name ausgegeben übergeben wird.

Evtl. mit setTimeout oder einer Pseudo-warte-auf-etwas-oder-rechne-etwas-Funktion.
War mein Post nützlich für dich? Ein Danke oder eine Bewertung sind immer schön.
Teilnehmer der Initiative "User verbessern Qualität im Forum" | Meine Systeme

Darf ich mal bitte vorbei?! Das geht nach Kompetenz... Danke! | | | Einmal dachte ich, ich hätte Unrecht. Hab mich aber getäuscht!
"Es ist gelogen, dass Videogames Kids beeinflussen. Hätte Pacman das getan, würden wir heute durch dunkle Räume irren, Pillen fressen und elektronische Musik hören."

[EID]-Mr.GiZMO ist offline   Mit Zitat antworten
Alt 08.07.2008, 09:43   #3 (permalink)
Overclocker
 

Registriert seit: 24.05.2002
Beiträge: 200

BenniG. wird schon bald berühmt werdenBenniG. wird schon bald berühmt werden

Standard AW: Problem bei einem request unter Javascript

Überleg mal wofür AJAX steht. (Tipp: Gleich das erste Wort birgt das Problem).

Du kannst nicht synchron arbeiten, wenn du ein Request in den Hintergrund abschickst.

Du musst deine Verarbeitung der Antwort im sog. CallBack (das wird aufgerufen, wenn die Response vom Webserver geschickt wurde) durchführen.

Das CallBack ist in deinem Fall die Funktion "request_content".

Das bedeutet das Asynchronous im AJAX.
Mit einer Wartezeit würde ich in keinem Fall arbeiten. Wenn dann mit einem Flag, das gesetzt wird, sobald die Response da ist (falls du wirklich den Eindruck von synchroner Verarbeitung erwecken musst).
BenniG. ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
[EID]-Mr.GiZMO (08.07.2008)
Alt 08.07.2008, 10:12   #4 (permalink)
semi-diabolisch
 
Benutzerbild von [EID]-Mr.GiZMO
 

Registriert seit: 12.09.2005
Beiträge: 2.922

[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein[EID]-Mr.GiZMO kann auf vieles stolz sein

Standard AW: Problem bei einem request unter Javascript

BenniG., wie würde man das in diesem speziellen Fall scripten?
[EID]-Mr.GiZMO ist offline   Mit Zitat antworten
Alt 08.07.2008, 21:41   #5 (permalink)
Overclocker
 

Registriert seit: 24.05.2002
Beiträge: 200

BenniG. wird schon bald berühmt werdenBenniG. wird schon bald berühmt werden

Standard AW: Problem bei einem request unter Javascript

Möglichkeit 1 mit Flag:
Code:
<script language="javascript" type="text/javascript">

var id_name;
var http_request;
var request_status
var request_content_v;
var response_present=false;

function request (url,id) {
        
        id_name = id;
        http_request = false;
        request_content_v = "";
        request_status = false;

        document.getElementById(id_name).value = "load...";
        
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // zu dieser Zeile siehe weiter unten
            }
        } 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('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
            return false;
        }
                
        http_request.onreadystatechange = request_content;
         
        http_request.open('GET', url, true);
        http_request.send(null);
        response_present=false;
        while(!response_present) {
            //do nothing but wait
            if (response_present) {
                break;
            }
        }
                
        document.getElementById(id_name).value = request_content_v;
        
        return request_status;
        
    }
    

    function request_content () {

        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                request_content_v = http_request.responseText
                request_status = true;
            } else {
                alert('Bei dem Request ist ein Problem aufgetreten.');
                request_status = false;
            }
            response_present = true;
        }
          
    }

</script>
Besser: Verarbeitung im CallBack
Code:
    <script language="javascript" type="text/javascript">

    var id_name;
    var http_request;
    var request_status
    var request_content_v;
    var response_present=false;

    function request (url,id) {
            
            id_name = id;
            http_request = false;
            request_content_v = "";
            request_status = false;

            document.getElementById(id_name).value = "load...";
            
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                http_request = new XMLHttpRequest();
                if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');
                    // zu dieser Zeile siehe weiter unten
                }
            } 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('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
                return false;
            }
                    
            http_request.onreadystatechange = request_content;
             
            http_request.open('GET', url, true);
            http_request.send(null);
            response_present=false;
                            
            //das hier wird auch nicht funktionieren, ist die Frage, ob das überhaupt gebraucht wird?!
            //Kann wohl auch über request_content abgehandelt werden
            return request_status;
            
        }
        

        function request_content () {

            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                    request_content_v = http_request.responseText
                    request_status = true;
                    document.getElementById(id_name).value = request_content_v;
                } else {
                    alert('Bei dem Request ist ein Problem aufgetreten.');
                    request_status = false;
                }
                
            }
              
        }

    </script>
Beides selbstverständlich ungetestet

Und könnte mal jemand diese ellenlange URL kürzen? Sprenung der Seitenbreite müsste mit Peitschenhieben bestraft werden

Geändert von BenniG. (08.07.2008 um 22:09 Uhr)
BenniG. ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
mokus (09.07.2008)
Antwort

Stichworte
javascript, problem, request


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[News] Auch Lithium-Ionen-Akkus leiden unter einem Memory-Effekt TweakPC Newsbot News 0 16.04.2013 16:41
[News] Android 4.0: Verbreitung bei unter einem Prozent TweakPC Newsbot News 7 06.01.2012 20:15
Sorry, aber was bedeutet das? [Social Bookmarking Bilder unter einem Beitrag] COI3RA Feedback & Fragen an die Crew 16 29.06.2007 08:43
Problem bei Installation von einem DVD-RW unter Win Me MaxZorin Windows & Programme 1 13.05.2007 11:57
Javascript Button Problem mokus Programmiersprachen 5 26.10.2005 21:44


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.




Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2022, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved