Sebastian: Ajax - Callback in Array speichern

Hallo Leute,
ich hab leider kein richtigen Betreff gefunden um das Problem zu beschreiben.

So nun zu meinem Problem, ich habe 2 Funktionen und eine Array. In der Funktion "Init()"
wird die Array mit 2 Spielerdaten gefüllt.

Innerhalb der for schleife wird eine weitere Funktion aufgerufen "getPlayerId()" in der
ein Json String geparst wird. Mir ist leider nicht möglich den Rückgabewert in die Array zu speichern, da er nicht mehr weiss wohin er es abspeichern soll:

"Uncaught TypeError: Cannot read property 'PlayerId' of undefined "

Wie kann ich das Problem lösen? Beschäftige mich mit Javascript noch nicht solange um alle Möglichkeiten vorher auszutesten.

Dann habe ich noch eine Frage. Ist es Möglich das mein Script erst weiter läuft wenn alle "Players" eine Id haben? Da alles Asynchron abläuft, kann es doch passieren das beim nächsten Funktionsaufruf die variable Player[1]["PlayerId"] noch 0 ist und ich somit nicht weiter arbeiten kann.

Vielen Dank

Mfg Sebastian

  
	var Players = new Array("Name1", "Name2");  
	var Player = new Array (Players.length);  
  
	function init()  
	{  
		Players = new Array("Tarulis", "B4nsi");  
		Player = new Array (Players.length);  
		for (i = 0; i < Players.length; i++)  
		{  
		        Player[i]["Name"] = Players[i];  
			Player[i]["PlayerId"] = 0;  
  
                        getPlayerId(Player[i],function(data) {  
				Player[i]["PlayerId"] = data; // Uncaught TypeError: Cannot read property 'PlayerId' of undefined 	  
			});  
                }  
	}  
  
	function getPlayerId(player,callback)  
	{  
		$.ajax({  
			url:      "https://census.soe.com/get/ps2/character/?name.first=" + player["Name"],  
			dataType: "jsonp",  
			success:  function(data)  
			{  
				player["PlayerId"] = data.character_list[0].id; // Uncaught TypeError: Cannot read property 'PlayerId' of undefined 	  
				callback(data.character_list[0].id);  
			}  
		});  
	}  

  1. Hallo,

    Mir ist leider nicht möglich den Rückgabewert in die Array zu speichern, da er nicht mehr weiss wohin er es abspeichern soll:

    Du kannst Dir die im Callback benötigten Werte über Closures sichern, bevor Du die Ajax-Funktion aufrufst. Also Funktionen, die Dir dann - im Callback aufgerufen - nur den Wert der Variablen zurück geben.

    Dann habe ich noch eine Frage. Ist es Möglich das mein Script erst weiter läuft wenn alle "Players" eine Id haben?

    Frag im Callback ab, ob alle Werte schon vorhanden sind. Nur in dem Fall startest Du dann die weitere Verarbeitung.

    Gruß
    Stefanie

    1. Hallo,

      Frag im Callback ab, ob alle Werte schon vorhanden sind. Nur in dem Fall startest Du dann die weitere Verarbeitung.

      oder du arbeitest synchron statt asynchron.

      Viele Grüße
      Siri

      1. Hallo,

        Frag im Callback ab, ob alle Werte schon vorhanden sind. Nur in dem Fall startest Du dann die weitere Verarbeitung.

        oder du arbeitest synchron statt asynchron.

        Viele Grüße
        Siri

        Das geht nicht, da der dataType jsonp ist und es dadurch kein synchron zuläst