Hallo allemaal,

Ik ben even aan het experimenteren met Prototype, hiervoor heb ik het volgende stukje code:

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.
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 :)
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?
bump
bump
Omdat het beveiligd is met een gebruikersnaam en wachtwoord? :P
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
bump
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:

		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;
						}
				      }
				};
			};

Reageren