Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

JS/Ajax Reihenfolge Funktionen

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 14.02.2010, 14:42

Hallo zusammen,

also ich habe mal eine Frage, da ich nun schon 3 Tage mit zwei winzigen Funktionen rummache und keine Lösung finde. Bin für JS wohl wirklich zu doof.

Ich habe eine kleine Funktion

Code: Alles auswählen

function setMyCenter()
{
	debug('setMyCenter');
	// Wenn centerBounds nicht vorhanden, 
	// dann centerBounds aus Datenbank laden und generieren
	if(!centerBounds)
	{
		debug('centerBounds not set');
		loadMyCenter();
	}
	
	debug('centerBounds3 '+centerBounds);
}
Wie man sieht, soll wenn centerBounds nicht vorhanden ist eine zweite Funktion aufgerufen werden, die dann den Wert ermittelt. Auch dies derzeit sehr einfach gehalten.

Code: Alles auswählen

function loadMyCenter()
{
	debug('loadMyCenter from Database');
	centerBounds = 'test';
	debug('centerBounds2 '+centerBounds);
}

So eigentlich sollte dabei etwas rauskommen wie:
setMyCenter
centerBounds not set
loadMyCenter from Database
centerBounds2 test
centerBounds3 test

Allerdings scheint da wohl die Reihenfolge nicht zu passen, nur warum, das ist mein Problem...
setMyCenter
centerBounds not set
loadMyCenter from Database
centerBounds3 false
centerBounds2 test

Weiß einer wie ich das lösen kann - irgendwie muss es ja gehen.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 14.02.2010, 17:34

Poste mal den ganzen Code, der Ausschnitt da oben funktioniert wie erwartet (siehe unten).

Im Moment lässt sich dazu nur allgemein sagen, dass das erste A in Ajax für asynchron steht. Falls du also irgendwo außerhalb des zitierten Ausschnittes tatsächlich Ajax einsetzt, wäre die Abfolge möglicherweise erklärbar. Mit den bis jetzt vorliegenden Informationen ist sie es leider nicht, dies …

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http&#58;//www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>

<script type="text/javascript">

var debug = console.debug;
var centerBounds;

function setMyCenter&#40;&#41; 
&#123; 
   debug&#40;'setMyCenter'&#41;; 
   // Wenn centerBounds nicht vorhanden, 
   // dann centerBounds aus Datenbank laden und generieren 
   if&#40;!centerBounds&#41; 
   &#123; 
      debug&#40;'centerBounds not set'&#41;; 
      loadMyCenter&#40;&#41;; 
   &#125; 
    
   debug&#40;'centerBounds3 '+centerBounds&#41;; 
&#125;

function loadMyCenter&#40;&#41; 
&#123; 
   debug&#40;'loadMyCenter from Database'&#41;; 
   centerBounds = 'test'; 
   debug&#40;'centerBounds2 '+centerBounds&#41;; 
&#125;

</script>

</head>

<body onLoad="setMyCenter&#40;&#41;">

</body>

</html>
&#8230; ergibt das &#8230;

Code: Alles auswählen

setMyCenter z.html &#40;Zeile 14&#41;
centerBounds not set z.html &#40;Zeile 19&#41;
loadMyCenter from Database z.html &#40;Zeile 28&#41;
centerBounds2 test z.html &#40;Zeile 30&#41;
centerBounds3 test z.html &#40;Zeile 23&#41;

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 14.02.2010, 18:03

Ah ok, dann liegt es wohl wirklich daran. Ein kleiner Teil fehlt, den hatte ich extra weg gelassen, damit es nicht zu unübersichtlich wird.

An sich passt das da oben schon so, nur in der zeiten Funktion steht anstelle von "centerBounds = 'test';" das hier:

Code: Alles auswählen

var urlstr = "region-center.php";
var request = google.maps.XmlHttp.create&#40;&#41;;

request.open&#40;"GET", urlstr, true&#41;;
request.onreadystatechange = function&#40;&#41;
&#123;
	if &#40;request.readyState == 4&#41;
	&#123;
		var xmlCenterDoc = request.responseXML;
		var locations = xmlCenterDoc.documentElement.getElementsByTagName&#40;"location"&#41;;
		centerBounds = map.getBounds&#40;&#41;;
		
		if &#40;locations.length&#41;
		&#123;
		     centerBounds = new google.maps.LatLngBounds&#40;&#41;;
		     for &#40;var i = 0; i < locations.length; i++&#41;
			&#123;
				var point = new google.maps.LatLng&#40;locations&#91;i&#93;.getAttribute&#40;"lat"&#41;, locations&#91;i&#93;.getAttribute&#40;"lng"&#41;&#41;;
				centerBounds.extend&#40;point&#41;;
			&#125;
		&#125;
	&#125;
&#125;
request.send&#40;null&#41;;
Und ja, liegt wohl daran, dass es asynchron ist, zumindest geben das viele andere Quellen her, auch wenn immer ohne Lösung. Die einzige die es bisher gab war eine mit "anonyme Funktionen", aber da kam ich dann auch nicht weiter.

Edit:
Ganz darüber gibt es noch die Funktion zur Initaliesierung

Code: Alles auswählen

var centerBounds = false;

google.load&#40;"maps", "2.x",&#123;"other_params"&#58;"sensor=true","locale"&#58;"de_DE"&#125;&#41;;

google.setOnLoadCallback&#40;initialize&#41;;

function initialize&#40;&#41;
&#123;
	debug&#40;'initialize'&#41;;
	if&#40;google.maps.BrowserIsCompatible&#40;&#41;&#41;
	&#123;
		map = new google.maps.Map2&#40;document.getElementById&#40;'mapdiv'&#41;&#41;;
		//map.addControl&#40;new google.maps.MapTypeControl&#40;&#41;&#41;;
		map.disableScrollWheelZoom&#40;&#41;;
		
		setMyCenter&#40;&#41;;
		
		myLargeMapControl = new google.maps.LargeMapControl&#40;&#41;;
		myOverviewMapControl = new google.maps.OverviewMapControl&#40;&#41;;
		myMapTypeControl = new google.maps.MapTypeControl&#40;&#41;;
		
		map.disableDragging&#40;&#41;;
	&#125;
&#125;
Die region-center.php liefert

Code: Alles auswählen

<locations>
<location lat="52.383858" lng="13.150482" />
<location lat="52.634499" lng="13.722090" />
</locations>
Ich habe derzeit schon eine Lösung gefunden, aber gefallen tut die mir nicht wirklich. In der zweiten Funktion prüfe ich nun einfach nochmals, ob "centerBounds" vorhanden ist. Wenn ja, dann wird setMyCenter() nochmals aufgerufen. Wenn nicht, dann wird ein standard-Wert gesetzt.

Die "Reihenfolge" wäre da zwar immer noch falsch, aber es funktioniert soweit. Nur ich finde das irgendwie extrem umständlich und kann mir nicht vorstellen, dass das so normal ist.