Unfinded terwijl het object bestaad...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom K

Tom K

02/03/2009 19:02:00
Quote Anchor link
Hallo allemaal,

Ik ben even aan het experimenteren met Prototype, hiervoor heb ik het volgende stukje code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
function DevHouse()
{
    this.clearField = function(field, standard_value)
    {
        if(field.value == standard_value)
        {
            field.value = '';
        }
    }
    this.Request = function()
    {
        this.Json = function(url)
        {

            new Ajax.Request(url, {
                method:'get',
                requestHeaders: {Accept: 'application/json'},
                onSuccess: function(transport){
                    return transport.responseText.evalJSON(true);
                }
            });
            
            
    
        }
    }
}

window.onload = function()
{
    devHouse = new DevHouse();
    request = new devHouse.Request();
    json = new request.Json('http://beta.devhouse.nl/js/forum/');
    alert('Test: '+ json.name);
}


als ik de pagina nu open zie ik een alert verschijnen met de text: Test: unfinded. Dit vind ik raar omdat in http://beta.devhouse.nl/js/forum/ name gewoon bestaat. In dit bestand staat de code:
{ "name": "Violet", "occupation": "character" }'

Weet iemand waar het probleem aan ligt en hoe ik het kan verhelpen?

Tom

PS: Als ik return transport.responseText.evalJSON(true); zal vervangen door alert(transport.responseText.evalJSON(true).name) zie ik Violet verschijnen, de fout zit dus niet in de json.
Gewijzigd op 01/01/1970 01:00:00 door Tom K
 
PHP hulp

PHP hulp

22/12/2024 09:13:14
 
Jelmer -

Jelmer -

02/03/2009 19:12:00
Quote Anchor link
Ajax is asynchroon. Je onSuccess-functie wordt daarom niet direct aangeroepen nadat je de request zelf hebt aangeroepen, en het return-statement returnt niet naar dat wat jij verwacht.

Intern werkt het meer iets in deze richting:
1. Jij maakt je XMLHttpRequest object, en kent een functie aan onreadystatechange toe.
2. Jij roept [XMLHttpRequest].send() aan
3. send() is meteen klaar, want deze wacht niet op antwoord van de server waar je je request heen stuurt. (Dit komt door de "true" die je meegeeft als 3e parameter aan [XMLHttpRequest].open())
... er gebeurt even niets
4. Je request krijgt eindelijk antwoord, en onreadystatechange wordt aangeroepen. Dit gebeurt een paar keer, totdat readystate 4 is. Op dat moment kan je responseText pas uitlezen, want dan pas is het hele antwoord binnen.

edit: Hij is een beetje outdated (en wat kinderachtig :P) maar mijn tutorial hierover kan je toch een beetje op weg helpen met het begrijpen van hoe XMLHttpRequest echt werkt, wat verborgen wordt door libraries. Wel zo handig als je moet debuggen :)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Tom K

Tom K

02/03/2009 19:19:00
Quote Anchor link
ok, dus als ik het goed begrijp is this.Json = function(url) eigelijk gestopt voordat er iets gereturnt is. hoe kan ik er voor zorgen dat het wel werkt?
 
Tom K

Tom K

03/03/2009 17:03:00
Quote Anchor link
bump
 
Tom K

Tom K

04/03/2009 17:38:00
Quote Anchor link
bump
 
GaMer B

GaMer B

04/03/2009 18:02:00
Quote Anchor link
Omdat het beveiligd is met een gebruikersnaam en wachtwoord? :P
 
Tom K

Tom K

05/03/2009 17:24:00
Quote Anchor link
GaMer13 schreef op 04.03.2009 18:02:
Omdat het beveiligd is met een gebruikersnaam en wachtwoord? :P


daar kan het niet aan liggen, omdat ik wel natuurlijk wel een sessie heb
 
Tom K

Tom K

09/03/2009 19:30:00
Quote Anchor link
bump
 
Tom K

Tom K

20/06/2009 11:42:00
Quote Anchor link
het is alweer een tijdje geleden, maar ik heb nog steeds hetzelfde probleem. Ik wil nu dat ik ajax zo kan gebruiken, dat ik de output van de request kan returnen, zodat ik het meteen in een variabele kan zetten. Ik heb daarom iets geprobeerd met een while, die pas stopt wanneer de ajax request klaar is. Helaas houd me hele browser er dan mee op(ff3). Weet iemand misschien nog een andere manier?

De code met die fout:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        var widgetApi = function() {
                this.getUsername = function() {
                    var returnedValue = '';
                     $.ajax({
                          url: '/user/login/login',
                          type: 'get',
                          success: function (j) {
                         returnedValue = j;
                          }
                        });
                      while(true) {
                        if(returnedValue == '') {

                        } else {
                            alert('LOL');
                            break;
                        }
                      }
                };
            };
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.