[Flex] Inlogproblemen met XML

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

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Hallo,
ik ben met Macromedia Flex 2 Builder Alpha 1 een webchatapplicatie aan het bouwen. Nu loop ik tegen een probleem aan met het inloggen. Ik krijg foutmeldingen van de ActionScript-parser.

De code die ik gebruik staat hieronder.

Ik krijg deze foutmeldingen:
code:
1
2
3
4
TypeError: Error #2007: Parameter 'listener' must be non-null.
    at SGB_Chat_SWF/loadLoginXML()
    at SGB_Chat_SWF/SGB_Chat_SWF$370$private::handleLogin()
    at SGB_Chat_SWF/__btnLogin_click()

En zodra ik op [Continue] druk, deze:
code:
1
2
3
4
Error #2044: Unhandled securityError: text=Error #2048: Security sandbox violation: 'file://H:\sgb\chatbox\bin\SGB_Chat_SWF.swf' may not load data from 'http://www.gymnasiumbreda.nl/index.php?action=chat2&stap=login&globgui=1'.
    at SGB_Chat_SWF/loadLoginXML()
    at SGB_Chat_SWF/SGB_Chat_SWF$370$private::handleLogin()
    at SGB_Chat_SWF/__btnLogin_click()


Wat doe ik hier verkeerd?

Dit is mijn volledige code tot nu toe:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" xmlns="*" currentState="stLogin">
    <mx:states>
        <mx:State name="stLogin">
            <mx:AddChild position="lastChild">
                <mx:Spacer width="100%" height="50%"/>
            </mx:AddChild>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:Label text="Gebruikersnaam:" x="10" y="10" width="200"/>
            </mx:AddChild>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:TextInput width="200" id="txtUname" x="10" y="29"/>
            </mx:AddChild>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:Label text="Wachtwoord:" x="10" y="58" width="200"/>
            </mx:AddChild>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:TextInput id="txtPasswd" width="200" password="true" x="10" y="75"/>
            </mx:AddChild>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:CheckBox x="10" y="102" label="Automatisch inloggen" id="chkAutoLogin"/>
            </mx:AddChild>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:Button label="Inloggen" click="handleLogin()" x="10" y="127" id="btnLogin" />
            </mx:AddChild>
            <mx:RemoveChild child="{spacer1}"/>
            <mx:PropertyOverride target="{pnlMain}" property="width" value="245"/>
            <mx:PropertyOverride target="{pnlMain}" property="height" value="195"/>
            <mx:PropertyOverride target="{pnlMain}" property="title" value="Inloggen"/>
            <mx:StyleOverride target="{pnlMain}" property="verticalAlign" value="middle"/>
        </mx:State>
        <mx:State name="stProcess">
            <mx:PropertyOverride target="{pnlMain}" property="width" value="400"/>
            <mx:PropertyOverride target="{pnlMain}" property="height" value="104"/>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:Label text="Wacht op verbinding met de server..." id="lblStatus" y="15" x="15"/>
            </mx:AddChild>
            <mx:AddChild target="{cnvMain}" position="lastChild">
                <mx:ProgressBar themeColor="haloSilver" indeterminate="true" width="350" labelPlacement="center" height="12" y="44" x="15"/>
            </mx:AddChild>
            <mx:PropertyOverride target="{pnlMain}" property="title" value="Bezig met inloggen..."/>
            <mx:AddChild target="{spacer1}" position="before">
                <mx:TextArea id="outputTxt" width="400" height="150"/>
            </mx:AddChild>
        </mx:State>
    </mx:states>
    <mx:Spacer width="100%" height="50%"/>
    <mx:Panel height="300" width="500" id="pnlMain" resizeEffect="resize">
        <mx:Canvas height="100%" width="100%" id="cnvMain"/>
    </mx:Panel>
    <mx:Spacer width="100%" height="50%" id="spacer1"/>
    <mx:Script>
        <![CDATA[
        import mx.controls.Alert;
        
        private function handleLogin()
        {
            if(txtUname.text == "" || txtPasswd.text == "")
            {
                Alert.show("De velden gebruikersnaam en wachtwoord mogen niet leeg zijn!","Fout")
            } else {
                btnLogin.visible = false;
                this.currentState = "stProcess"
                
                // Verbinding met de server maken...
                loadLoginXML("http://www.gymnasiumbreda.nl/index.php?action=chat2&stap=login&globgui=1", outputTxt)
                
                
            }
        }
            public function loadLoginXML(url:String, outTxt:TextArea):Void 
            {
                //trace (url);
                
                private var myXML:XML = new XML();
                private var myXMLURL:URLRequest = new URLRequest(url);
                private var myLoader:URLLoader = new URLLoader(myXMLURL);
                myLoader.addEventListener("complete", xmlLoaded);
        
                private function xmlLoaded(evtObj:Event) { 
                    myXML = XML(myLoader.data);
                    private var outStr:String = "";
                    for each (var item:XML in myXML.login) {
                        outStr += item.type.toString() + " "; 
                        outStr += item.bericht.toString() + " "; 
                        outStr += item.uid.toString(); 
                    }
                    outTxt.text = outStr;
                }
            }
        
                
        private function resetLoginField()
        {
            txtUname.text = "";
            txtPasswd.text = "";
            btnLogin.visible = true;
            this.currentState='stLogin'
        }
        
        private function handleWebError()
        {
            Alert.show("Er is een fout opgetreden met de webverbinding. Probeer het opnieuw.", "Foutmelding");
        }
        ]]>
    </mx:Script>
</mx:Application>


Ik heb in de (helaas onvolledige) help gekeken, maar daaruit wordt ik niet veel wijzer. Ook niet uit de demo op de macromedia-site, ik wil een chatapplicatie, geen foto's uit Flickr halen...

Edit: mijn HTML-pagina is deze (door Flex zelf gegenereerd)
HTML:
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
<!-- saved from url=(0014)about:internet -->
<html>
<head>
<title>SGB_Chat_SWF</title>
<style>
body { margin: 0px;
 overflow:hidden }
</style>
</head>
<body scroll='no'>
<table width='100%' height='100%' cellspacing='0' cellpadding='0'><tr><td valign='top'>
<noscript>
<object id='SGB_Chat_SWF.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='100%' width='100%'>
<param name='flashvars' value=''/>
<param name='src' value='SGB_Chat_SWF.swf'/>
<embed name='SGB_Chat_SWF.swf' pluginspage='http://www.macromedia.com/go/getflashplayer' src='SGB_Chat_SWF.swf' height='100%' width='100%' flashvars=''/>
</object>
</noscript>


<script language='javascript' charset='utf-8'>
document.write("<object id='SGB_Chat_SWF.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='100%' width='100%'>");
document.write("<param name='flashvars' value=''/>");
document.write("<param name='src' value='SGB_Chat_SWF.swf'/>");
document.write("<embed name='SGB_Chat_SWF.swf' pluginspage='http://www.macromedia.com/go/getflashplayer' src='SGB_Chat_SWF.swf' height='100%' width='100%' flashvars=''/>");
document.write("</object>");
</script>


</td></tr></table>
</body>
</html>

[ Voor 47% gewijzigd door Alex) op 30-10-2005 19:17 ]

We are shaping the future


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Alex schreef op zondag 30 oktober 2005 @ 19:00:
code:
1
2
3
4
TypeError: Error #2007: Parameter 'listener' must be non-null.
    at SGB_Chat_SWF/loadLoginXML()
    at SGB_Chat_SWF/SGB_Chat_SWF$370$private::handleLogin()
    at SGB_Chat_SWF/__btnLogin_click()
Er staat letterlijk dat de parameter Listener niet NULL mag zijn, ik weet zelf ff niet van welke functie dat is, maar ik neem aan dat je dat wel in je reference kan opzoeken...
code:
1
2
3
4
Error #2044: Unhandled securityError: text=Error #2048: Security sandbox violation: 'file://H:\sgb\chatbox\bin\SGB_Chat_SWF.swf' may not load data from 'http://www.gymnasiumbreda.nl/index.php?action=chat2&stap=login&globgui=1'.
    at SGB_Chat_SWF/loadLoginXML()
    at SGB_Chat_SWF/SGB_Chat_SWF$370$private::handleLogin()
    at SGB_Chat_SWF/__btnLogin_click()
Lijkt me dat dat komt doordat je wat van een domein probeert binnen te halen wat niet gelijk is aan het domein waar je flex app van geladen wordt...

om het simpel te stellen: lezen ;)

[ Voor 5% gewijzigd door faabman op 30-10-2005 21:09 ]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Dat tweede dacht ik ook al, van local naar internet mag dus niet (allowScriptAccess waarschijnlijk), maar die eerste weet ik dus echt niet. De reference is ook nog niet af, omdat het een alpha is.

Dat hele stuk loadLoginXML() heb ik trouwens uit de reference gekopieerd en aan mijn eisen aangepast...

[ Voor 22% gewijzigd door Alex) op 30-10-2005 21:29 ]

We are shaping the future


Verwijderd

Zonder er erg lang over nagedacht te hebben (net terug van vakantie, nog niet veel met AS 3 gespeeld):

- crossdomain.xml is nodig, net zoals bij Flash Player 7 en 8
- De functie xmlLoaded is nog niet gedefinieerd wanneer je er naar verwijst bij addEventListener. Ik gok dat het wel werkt wanneer je eerst de functie definieerd en pas daarna die functie als eventlistener specificeerd?

Cheers,
Waldo

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
nu ik je script nog een keer doorlees denk ik dat het probleem in de volgorde zit:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            public function loadLoginXML(url:String, outTxt:TextArea):Void 
            {
                //trace (url);
                
                private var myXML:XML = new XML();
                private var myXMLURL:URLRequest = new URLRequest(url);
                private var myLoader:URLLoader = new URLLoader(myXMLURL);
                myLoader.addEventListener("complete", xmlLoaded);
        
                private function xmlLoaded(evtObj:Event) { 
                    myXML = XML(myLoader.data);
                    private var outStr:String = "";
                    for each (var item:XML in myXML.login) {
                        outStr += item.type.toString() + " "; 
                        outStr += item.bericht.toString() + " "; 
                        outStr += item.uid.toString(); 
                    }
                    outTxt.text = outStr;
                }
            }


moet waarschijnlijk zijn (let op de addEventListener))

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            public function loadLoginXML(url:String, outTxt:TextArea):Void 
            {
                //trace (url);
                
                private var myXML:XML = new XML();
                private var myXMLURL:URLRequest = new URLRequest(url);
                private var myLoader:URLLoader = new URLLoader(myXMLURL);
        
                private function xmlLoaded(evtObj:Event) { 
                    myXML = XML(myLoader.data);
                    private var outStr:String = "";
                    for each (var item:XML in myXML.login) {
                        outStr += item.type.toString() + " "; 
                        outStr += item.bericht.toString() + " "; 
                        outStr += item.uid.toString(); 
                    }
                    outTxt.text = outStr;
                }

                myLoader.addEventListener("complete", xmlLoaded);
            }

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Alvast bedankt, ik ga het straks uitproberen!

We are shaping the future


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Ik heb het geprobeerd, met het omwisselen van die twee, werkt niet :(

Voor degene die Flex Builder 2 Alpha 1 willen testen:
http://www.macromedia.com...itlement/index.cfm?e=labs

(Je hebt wel een Macromedia passport nodig, is zo aangemaakt)

We are shaping the future


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Alex schreef op dinsdag 01 november 2005 @ 21:48:
Ik heb het geprobeerd, met het omwisselen van die twee, werkt niet :(

Voor degene die Flex Builder 2 Alpha 1 willen testen:
http://www.macromedia.com...itlement/index.cfm?e=labs

(Je hebt wel een Macromedia passport nodig, is zo aangemaakt)
Krijg je dezelfde of een andere foutmelding?

Heeft het misschien te maken met de scope waarin je de functie xmlLoaded defineert?

Wat gebeurt er wanneer je de functie xmlLoaded als public defineert buiten de functie loadLoginXML?

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Ik krijg exact dezelfde foutmelding. Het buiten de functie plaatsen van xmlLoaded() werkt ook niet, dan krijg ik alleen fouten over nietgedefinieerde variabelen. Volgens de manual zou het zo moeten werken, ligt er misschien aan dat het een alpha is...

We are shaping the future


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

heb zo'n gevoel dat dit beter werkt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private function xmlLoaded(evtObj:Event) { 
                    myXML = XML(myLoader.data);
                    private var outStr:String = "";
                    for each (var item:XML in myXML.login) {
                        outStr += item.type.toString() + " "; 
                        outStr += item.bericht.toString() + " "; 
                        outStr += item.uid.toString(); 
                    }
                    outTxt.text = outStr;
                }

public function loadLoginXML(url:String, outTxt:TextArea):Void 
            {
                //trace (url);
                
                private var myXML:XML = new XML();
                private var myXMLURL:URLRequest = new URLRequest(url);
                private var myLoader:URLLoader = new URLLoader(myXMLURL);

                myLoader.addEventListener("complete", xmlLoaded);
            }
Alex schreef op dinsdag 01 november 2005 @ 22:41:
Ik krijg exact dezelfde foutmelding. Het buiten de functie plaatsen van xmlLoaded() werkt ook niet, dan krijg ik alleen fouten over nietgedefinieerde variabelen. Volgens de manual zou het zo moeten werken, ligt er misschien aan dat het een alpha is...
hmm moet eens leren lezen. |:(

Probeer dit eens:
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
private var myXML:XML;
private var myXMLURL:URLRequest;
private var myLoader:URLLoader;
private var outStr:String;

private function xmlLoaded(evtObj:Event) { 
                    myXML = XML(myLoader.data);
                    outStr = "";
                    for each (var item:XML in myXML.login) {
                        outStr += item.type.toString() + " "; 
                        outStr += item.bericht.toString() + " "; 
                        outStr += item.uid.toString(); 
                    }
                    outTxt.text = outStr;
                }

public function loadLoginXML(url:String, outTxt:TextArea):Void 
            {
                //trace (url);
                
                myXML = new XML();
                myXMLURL = new URLRequest(url);
                myLoader = new URLLoader(myXMLURL);

                myLoader.addEventListener("complete", xmlLoaded);
            }

PS Ik ken Flex niet, nooit van gehoord zelfs, dus weet niet of het klopt.

[ Voor 55% gewijzigd door eghie op 01-11-2005 22:56 . Reden: code aangepast ]


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Dank je eghie, dat was de oplossing :) :D

Nu alleen de sandbox nog (en beter om leren gaan met XML), en dan gaat het helemaal goedkomen :)

[ Voor 55% gewijzigd door Alex) op 02-11-2005 09:37 ]

We are shaping the future

Pagina: 1