• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

inkludierte Funktionen mehrfach aufrufen

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey Leute,

Das Projekt ist mittlerweile riesig, weshalb ich hier nur ganz grobe Strukturen aufzeigen kann. Ich habe das Problem auch genau lokalisiert, nur lösen kann ich es nicht.

Ich habe das Hauptdokument, in dem sich zwei Divs befinden. Mit klick auf einen der Links, werden DB-Einträge aktualisiert und dann per AJAX die beiden Divs gezwungen, sich selbst zu aktualisieren: eben mit den neuen DB-Daten. Das funktioniert soweit auch grundlätzlich.

index.html
[src=html4strict]
<html>
<div id="1">
<a onmouseover="tooltip('<?php include('tooltip.php'); ?>');">KLICK</a>
</div>
<div id="2">
<a onmouseover="tooltip('<?php include('tooltip.php'); ?>');">KLICK</a>
</div>
</html>
[/src]


tooltip.php
[src=php]
include('inc/funktionen.php');
[/src]


funktionen.php
[src=php]

function hull($p1)
{
mach was;
}

function fuel($p1)
{
mach was;
}

usw.
[/src]


Die geforderte tooltip.php selbst erscheint nur beim Hovern über die Links. Auch das funktioniert hervorragend nach einem vollständigen Neuladen des Hauptdokumentes. Wurde aber ein Link geklickt, stirbt einer der beiden Divs beim Neuladen. (Entferne ich das Hover-Feature bei einem der beiden Divs, läuft der Rest aber vollständig durch, auch mittels AJAX.)

Die tooltip.php selbst greift auf deine weitere php zu, die einen Haufen Funktionen innehat.


Das Problem: Wenn die beiden Divs gezwungen werden, sich zu aktualisieren, greifen beide jeweils einmal per include auf diesen Funktionenhaufen zu. Damit wird jede Funktion zweimal deklariert. Und das stört ihn. Der Gegentest, einen zweiten Satz Funktionen mit selbem Inhalt aber anderen Namen zu inkluden, funktioniert zwar, halte ich aber für schwachsinnig. Denn: Beim Neuladen der Gesamtseite stört sich ja der Code anscheinend nicht daran. Nur wenn per AJAX nachgeladen wird.

Ich weiß einfach nicht, wo ich die funktion.php inkludieren soll, damit sie zwar für beide Divs verfügbar ist, aber nicht mit sich selbst kollidiert, wenn die Divs gleichzeitig mittels AJAX nachgeladen werden.:confused:


Ich höre ersteinmal auf zu schreiben und warte, ob mich überhaupt irgendjemand versteht. :D
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Warum werden die Funtionen über Ajax nachgeladen?

Und warum stört es den Browser, ob du beim Mouseover "evil1()" oder "evil1()" jeweils aufrufst von zwei Links?... also bei deren "onmouseover" - wegen des Scopes? - dann wird eben die erste Funktion damit aufgerufen bzw. die zweite, da diese die erste überschreibt, das sollte erst beim "evt.target" zum tragen kommen, wobei das auch von Link zu Link unterschiedlich gesehen wird.

Die Frage ist, wie aktualisierst du die Funktionen die aus der Datenbank kommen(?), das heißt die beiden "links" die den Funktionscode enthalten. Und wäre es nicht besser eine PHP anzusteuern, über Ajax, anstelle zwei mal den gesamten Code in die Links zu packen? Die Daten zurückgibt über Ajax?
 
Zuletzt bearbeitet:

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #3
Warum werden die Funtionen über Ajax nachgeladen?

Meine Erfahrung sagt mir, dass alles, was in der index inkludiert ist, nur nach Neuladen verfügbar ist. Sobald ein Div nachgeladen wurde, kann es nicht mehr darauf zugreifen. Daher wird es ins DIV selbst gepackt.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Der DOM ändert sich, wenn du ein HTML-Element veränderst, das heißt, du musst "listener" neu zugreifen lassen, damit diese wirken, zumindest wenn du etwas hinzufügst, oder löschst? :unknown:

Daher vielleicht "rebinden" für die OnMouseOver. :)

Weil das alte falsche Verknüpfungen hat auf DOM Element oder auf den ursprünglichen DOM-Inhalt und ein Hardcoded "function (xay1()) " ist schlechter als ein hardcoded "onmouseover="javascript: loadFunc(); " was immer "loadFunc" ausführt was als Brücke dient.

Ich würde eine Funktion aufrufen, die Fix ist, die Ajax ausführt - bei beiden onMouseOver, aber deine Funktion in der PHP ansteuert, die dir die Werte aus der Datenbank anzeigt, gegebenfalls mit Parameter mit Request auf was du dich beziehst, im "$_POST" oder "$_GET" in PHP.

Wenn du einen Div "dynamisch" hinzulädst, verändert sich nicht nur der DOM, aber auch ist das Element nicht "verbunden"(?), evtl. das heißt du mußt, vielleicht, über "addEventListener" die Funktion an das Element knüpfen, anstatt es mit "onmouseover" zu machen, da bin ich mir aber auch nicht 100% sicher.

PS: Du hast immer komische Corner-Cases :D

PPS: Zweiter Gedanke, nachdem die Seite geladen ist, wird eine DOM-Änderung vielleicht nicht wahrgenommen, und das "onmouseOver" ist "statisch" und wird nicht neu evaluiert (von der Javascript Engine), vielleicht daher das addEventListener und dann ein entsprechenden Ajax-Request.
 
Zuletzt bearbeitet:

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #5
Ich glaube nicht, dass das ein JS-Problem ist, sondern PHP :unknown: Sobald ich die Funktionen umbenenne, sodass sie nicht zweimal gleich geladen werden, geht's ja.
Corner-Cases, ja, das liegt wohl daran, dass ich es mir komplizierter mache, als es nötig ist. Bin kein Profi. :D

aus einer der DIVs
[src=php]
$query = mysqli_query($db, "SELECT * FROM armeen WHERE kategorie = '".$kategorien[$i]."' && gebiet = '".$_SESSION['gebiet']."' ORDER BY einsatz");
while($armee = mysqli_fetch_array($query))
{
echo "<img style=\"cursor:pointer;\" height=\"48px\" id=\"".$armee['code'].$armee['id']."\"";
if($armee['einsatz'] == '0') {echo " src=\"img/unit/".$armee['code'].".png\"";} else {echo "src=\" img/unit/".$armee['code']."_out.png\"";}
echo " onmouseover=\"Tip('"; include 'tip/tooltip_einheit_v2.php'; echo "')\" onmouseout=\"UnTip()\"";
if($armee['einsatz'] == '0') {echo " onclick=\"einsetzen_ger('".$armee['code']."','".$armee['typ']."',1,'".$armee['id']."'); besoldung();\"";}
echo " /> <br>";
}
[/src]


aus dem tooltip
[src=php]
include '/inc/damage_fkt.php';
if ($seed_code == "211") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "221") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "231") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
usw.
[/src]

aus der damage_fkt.php
[src=php]
function hull($p1)
{
global $hits;

if($hits[$p1] <= 0.33) {$col = "white"; }
elseif($hits[$p1] > 0.33 && $hits[$p1] <= 0.66) {$col = "orange";}
else {$col = "red";}
echo "<div style=\'line-height:26px; float:left; width:48px; height:26px; vertical-align:middle;background-color:".$col."; font-family:Arial; color:black; margin:2px; font-size:13px; text-align:center;\'><b>HULL</b></div>";
}

function eng($p1)
{
global $hits;

if($hits[$p1] <= 0.33) {$col = "white"; }
elseif($hits[$p1] > 0.33 && $hits[$p1] <= 0.66) {$col = "orange";}
else {$col = "red";}
echo "<div style=\'line-height:26px; float:left; width:48px; height:26px; vertical-align:middle;background-color:".$col."; font-family:Arial; color:black; margin:2px; font-size:13px; text-align:center;\'><b>ENG</b></div>";
}
usw.
[/src]
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Ich glaube das Problem ist wirklich, du änderst dynamisch das "onmouseover", "onclick" et cetera?

Was steht denn in der "tip/tooltip_einheit_v2.php" ?

Aber du invalidierst den DOM, aber die Javascript Engine evaluiert das "onmouseover" vielleicht nur einmal beim Start/Laden der Seite.

Vielleicht kommst du besser bei weg, wenn du den Elementen fixe Funktionen gibst, die entsprechendes Ajax / über EINE Fixe Funktion, übermitteln an eine Steuer.php die die Logik und die Abfragen macht ob und was okay ist.

So, kopierst du scheinbar, Ajax Code in deine HTML, "beim Laden" über PHP - aber so bald sich der OnMouseOver Dynamisch ändert, weiß der Browser nicht damit umzugehen, weil die Javascript-Engine die Seite "beim laden" geparst hat.

Wäre meine Vermutung.
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #7
das ist die tooltip_einheit_v2.php in Gänze
Wenn ich jetzt den elseif- Haufen mit den Funktionsaufrufen (hull, eng, fuel usw.) auskommentiere, funktioniert alles! Auch der Rest der Datei tooltip_einheit_v2.php wird sauber geparst (tank, einsatz etc.). Daher denke ich nicht, dass JS und DOM das Problem ist. Es sind die php-Funktionen.


[src=php]
include '/inc/damage_fkt.php';

$seed_code = $armee['code'];

switch (true) {
case $armee['tank'] >= 40: $color_tank = "#FFF"; break;
case $armee['tank'] < 40 && $armee['tank'] > 20: $color_tank = "orange"; break;
case $armee['tank'] <= 20: $color_tank = "red"; break;
}



if ($armee['einsatz'] != '0')
{ $einsatz = "Einsatz in ".$armee['einsatz']."</td></tr>"; }
else
{ $einsatz = "einsatzbereit</td></tr>"; }


echo "<table border=\'0\'>";
echo "<tr>";
echo "<td colspan=\'2\' width=\'160px\' height=\'5px\'><div style=\'background-color:#333; padding:4px; color:#FFF;\'>".$armee['typ']."</div></td>";
echo "<td width=\'80px\' rowspan=\'9\' style=\'vertical-align:top; padding-left: 15px; padding-top: 15px;\'>";

$seed_ammo = $armee['ammo'];
$seed_ammo = str_replace("[0,0]", "[0x0]", $seed_ammo); // Maskierung von [0,0] bei Smokegranaten, da "," sonst als Trennzeichen interpretiert wird

// [["32Rnd_120mm_APFSDS_shells_Tracer_Red",[0],18],["16Rnd_120mm_HE_shells_Tracer_Red",[0],13],["2000Rnd_65x39_Belt",[0],1540],["2000Rnd_65x39_Belt",[0],160],["SmokeLauncherMag",[0,0],1]]

$ammo_array_arma = explode("],[",substr($seed_ammo, 2, -2));
$ammo_arr = array();

for($d=0; $d < count($ammo_array_arma); $d++)
{
array_push($ammo_arr, explode(",",$ammo_array_arma[$d]));
}

foreach($ammo_arr as &$ammo)
{
$ammo[0] = substr($ammo[0], 1, strlen($ammo[0])-2); // Anführungsstriche entfernen
$ammo_rnd = explode("_", $ammo[0]);

$treffer_pos0 = strpos($ammo_rnd[0], "Rnd");
$treffer_pos1 = strpos($ammo_rnd[1], "Rnd");


$ammo_rnd_count_0 = str_replace("Rnd", "", $ammo_rnd[0]);
$ammo_rnd_count_1 = str_replace("Rnd", "", $ammo_rnd[1]);


if($treffer_pos0 > 0 && $ammo_rnd_count_0 > 100)
{
echo "<img src=\'img/ammo_mg.png\'> ".$ammo[2]." / ".$ammo_rnd_count_0."<br>";
}
elseif($treffer_pos0 > 0 && $ammo_rnd_count_0 <= 100 && !strpos($ammo[0], "missile"))
{
echo "<img src=\'img/ammo_cannon.png\'> ".$ammo[2]." / ".$ammo_rnd_count_0."<br>";
}
elseif($treffer_pos0 > 0 && (strpos($ammo[0], "missile") > 0 || strpos($ammo[0], "Skyfire") > 0 ))
{
echo "<img src=\'img/ammo_missile.png\'> ".$ammo[2]." / ".$ammo_rnd_count_0."<br>";
}
elseif($treffer_pos1 > 0 && (strpos($ammo[0], "missile") > 0 || strpos($ammo[0], "Skyfire") > 0 ))
{
echo "<img src=\'img/ammo_missile.png\'> ".$ammo[2]." / ".$ammo_rnd_count_1."<br>";
}
elseif($ammo[0] == "SmokeLauncherMag")
{
echo "<img src=\'img/ammo_smoke.png\'> ".$ammo[2]." / 2<br>";
}



}
echo "</td>";
echo "<td width=\'275px\' rowspan=\'9\'><img src=\'img/unit_foto/".$armee['code'].".png\'></td>";

echo "</tr>";
echo "<tr>";
echo "<td colspan=\'2\' height=\'5px\'><div style=\'background-color:".$color_tank."; height:5px; width:".$armee['tank']."%; float:left; color:white; text-align:right;\'></div><div style=\'background-color:#9b9b9b; height:5px; width:".(100-$armee['tank'])."%; float:left;\'></div></td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\'center\' style=\'background-color:#9b9b9b;\' colspan=\'2\' width=\'63px\' height=\'1px\'>";
echo "<div style=\'width:156px; \'>";

$seed_dmg = $armee['bestand'];

// Seed in PHP-Array umwandeln
$hit_array_arma = explode("],[",substr($seed_dmg, 2, -2));
$hitpoints_str = $hit_array_arma[2];
$hitpoints_arr = explode(",", $hitpoints_str);

$hits = array();

for($h=0; $h < count($hitpoints_arr); $h++)
{
$hits[$h] = $hitpoints_arr[$h];
}

if ($seed_code == "211") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "221") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "231") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "241") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "251") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "311") {hull(5); eng(6); fuel(4); whl2(0,1,2,3);}
elseif ($seed_code == "321") {hull(5); eng(6); fuel(4); whl2(0,1,2,3);}
elseif ($seed_code == "331") {hull(5); eng(6); fuel(4); whl2(0,1,2,3);}
elseif ($seed_code == "341") {hull(5); eng(6); fuel(4); whl2(0,1,2,3);}
elseif ($seed_code == "411") {hull(3); eng(1); fuel(2); whl4(4,5,6,7,8,9,10,11);}
elseif ($seed_code == "421") {hull(0); eng(2); gun(10); ltrk(3); rtrk(4); trrt(9);}
elseif ($seed_code == "431") {hull(0); eng(2); gun(8); ltrk(3); rtrk(4); trrt(7);}
elseif ($seed_code == "511") {hull(0); eng(6); inst(2); atrq(8); mrot(7); slg(26);}
elseif ($seed_code == "521") {hull(0); eng(6); inst(2); atrq(8); mrot(7);}
elseif ($seed_code == "531") {hull(0); eng(1); fuel(2); ctrl(3,4,5,6,7,8); inst(); gear();}
elseif ($seed_code == "541") {hull(0); eng(7); inst(2); atrq(9); mrot(8); slg(29);}
elseif ($seed_code == "212") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8);}
elseif ($seed_code == "222") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8);}
elseif ($seed_code == "232") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8);}
elseif ($seed_code == "242") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8);}
elseif ($seed_code == "252") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8);}
elseif ($seed_code == "312") {hull(6); eng(7); fuel(5); whl2(0,1,2,3);}
elseif ($seed_code == "322") {hull(6); eng(7); fuel(5); whl2(0,1,2,3);}
elseif ($seed_code == "332") {hull(6); eng(7); fuel(5); whl2(0,1,2,3);}
elseif ($seed_code == "342") {hull(6); eng(7); fuel(5); whl2(0,1,2,3);}
elseif ($seed_code == "412") {hull(3); eng(1); fuel(2); whl3(4,5,6,7,8,9);}
elseif ($seed_code == "422") {hull(0); eng(2); gun(10); ltrk(3); rtrk(4); trrt(9);}
elseif ($seed_code == "432") {hull(0); eng(2); gun(10); ltrk(3); rtrk(4); trrt(9);}
elseif ($seed_code == "512") {hull(0); eng(6); inst(2); atrq(8); mrot(7); slg(12);}
elseif ($seed_code == "522") {hull(0); eng(5); inst(2); atrq(7); mrot(6);}
elseif ($seed_code == "532") {hull(0); eng(1); fuel(2); ctrl(3,4,5,6,7,8); inst(); gear();}
elseif ($seed_code == "542") {hull(0); eng(4); inst(27); atrq(6); mrot(5); slg(32);}

echo "</div";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td height=\'10px\'></td>";
echo "<td></td>";
echo "</tr>";
echo "<tr>";
echo "<td height=\'10px\'><b>IDNR:</b></td>";
echo "<td>".$armee['code']."-".$armee['id']."</td>";
echo "</tr>";
echo "<tr>";
echo "<td height=\'10px\'><b>Kampfkraft:</b></td>";
echo "<td>".$armee['kraft']."</td>";
echo "</tr>";
echo "<tr>";
echo "<td height=\'10px\'><b>Besatzung:</a></b></td>";
echo "<td>".$armee['besatzung']." Mann</td>";
echo "</tr>";
echo "<tr>";
echo "<td height=\'10px\'><b>Zeitwert:</b></td>";
echo "<td>".${'K_'.$armee['code']}." Mio $</td>";
echo "</tr>";
echo "<tr>";
echo "<td valign=\'top\'><b>Status:</b></td>";
echo "<td valign=\'top\'>".$einsatz."</td>";
echo "</tr>";
echo "</table>";

[/src]

PS: ich weiß, dass viele kurze ECHOs länger dauern als ein langer ECHO.... :p
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Puh, Javascript ist einfach schlecht zu debuggend....

Sind denn die Funktionen alle bekannt?

Also "hull, eng, fuel, whlX" ?

Du könntest jetzt tracen, woran es scheitert und das ganze in eine try catch spannen, vielleicht bekommst du da mehr Info was oder wie etwas fehlt, oder ob etwas "kaputt" ist....

Wenn du dich auf:
[src=php]if ($seed_code == "211") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}
elseif ($seed_code == "221") {hull(19); eng(1); fuel(0); whl4(3,4,5,6,7,8,9,10);}[/src]

beziehst.

Vielleicht ist auch ein Binding falsch, oder eine Funktion fehlerhaft... schwer zu sagen.

Kannst du nochmal sagen, "was nicht geht?" bzw. was wann nicht geht.
Vielleicht ist es auch ganz einfach, aber ich komme nicht darauf. :D
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #9
Ja, den Teil meine ich. Dass die Funktionen sauber deklariert sind, sieht man ja daran, dass sie saubere Ausgaben machen. Leider nur wenn:

ENTWEDER die komplette Seite neugeladen wurde --> beide Divs geben sauber aus
ODER per AJAX nachgeladen wurde --> nur das erste geparste Divs gibt sauber aus, das zweite bricht an der Stelle include 'tip/tooltip_einheit_v2.php'; echo "')\ ab. Das heißt, alles andere, was darauf folgt, erscheint nicht im Browser.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Okay.... mal anders, was veränderst du, wenn du Ajax ausgibsts, was nach dem Neuladen nicht vorhanden ist?

Und funktioniert der Codeteil von Div1 auf Div2, wenn du ihn kopierst?
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #11
Wie du siehst, verändere ich gar nichts. Die Datenbank wird durch die Datei aspect_wechsel.php geupdatet und dann nach 0.5Sekunden 4 Divs (darunter die 2 ominösen) in sich neugeladen. Keine Änderung am DOM.


[src=javascript]function change_aspect(aspect,value,aspect2,value2)
{
xmlhttp=new XMLHttpRequest();
if(typeof aspect2 !== 'undefined')
{
xmlhttp.open("GET","aspect_wechsel.php?aspect="+aspect+"&value="+value+"&aspect2="+aspect2+"&value2="+value2,true);
}
else
{
xmlhttp.open("GET","aspect_wechsel.php?aspect="+aspect+"&value="+value,true);
}
xmlhttp.send();


setTimeout(function(){
$.get('desk_karte.php', function(data) {
$('#karte').html(data);
});
}, 500);
setTimeout(function(){
$.get('desk_truppenbericht.php', function(data) {
$('#truppenbericht').html(data);
})
}, 500);
setTimeout(function(){
$.get('desk_lageplan.php', function(data) {
$('#lageplan').html(data);
})
}, 500);
setTimeout(function(){
$.get('desk_tablet.php', function(data) {
$('#tablet').html(data);
})
}, 500);

}[/src]

--- [2017-12-09 21:04 CET] Automatisch zusammengeführter Beitrag ---

Und funktioniert der Codeteil von Div1 auf Div2, wenn du ihn kopierst?
Der ist identisch. Habe auch die Umkehrprobe gemacht. Der der als Erstes geparst wird, wird geladen, der zweite nicht.

Ich sag ma so: Wenn du Bock auf nen Corner Case hast, gebe ich dir gerne nen Zugang zur Mod von ArmA III. :D Dann kannste es besser sehen. Bin aufm TS unter ouraltis.de (als IP eingeben) erreichbar, wenn du magst.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Naja, die werden nicht "neu geladen", du änderst das HTML. Während ein Request noch läuft, laufen dann schon die anderen?

Irgendwie kommt hier nur immer mehr und mehr Code ;)
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
346
Kannst Du ein funktionierendes (lauffähig, aber mit deinem Fehler) Minimalbeispiel erstellen? Vielleicht könnte man Dir dann besser helfen.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Wo inkludierst du die Datei mehrfach, Javascript des Browsers läuft im client, der PHP Kram nicht.

Die schnelle schlampige Lösung die vermutlich die performance immens verschlechtert wäre vermutlich einfach require_once() statt include() zu verwenden. Aber für mich sieht das hier nach einem Logikstrukturfehler aus weil einer Client und Servercode nicht vernünftig auseinanderhalten kann bzw die Logik nicht entsprechend geplant hat.
 
Zuletzt bearbeitet:

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #15
Mir ist der Unterschied zwischen serverseitigem PHP und clientseitigem JS schon bewusst. Es mag sein, dass irgendwelche Verschränkungen, die auf sog. Planungsfehler zurückzuführen sind, den Abbruch verursachen. Ich kann es mir aber beim besten Willen nicht erklären.

Mit require_once() geht es tatsächlich. Ich spüre keinerlei Geschwindigkeitsunterschied. Aber ich bin ja zZ auch alleine auf dem Server. :confused:

Auch include_once funktioniert. Ich habe noch einmal im Manual gelesen, in dem steht: "include_once kann beispielsweise benutzt werden, wenn die selbe Datei an mehreren Stellen eingebunden wird, um Problemen durch erneute Definitionen von Funktionen, erneute Zuweisung von Variablen oder ähnliches zu vermeiden."

Das ist es doch genau! Warum sollte es dadurch langsamer werden? Wegen der Prüfung, ob es schon eingebunden ist? Im Netz wird das zwar bestätigt, aber gleich relativiert: Der Unterschied sei nicht signifikant. Ich werde es eine Weile Überprüfen und schauen, ob es unter Last deutlich schwerfällig wirkt. Wenn ja, komme ich hierauf zurück.

Bis dahin erst einmal vielen Danke für die Hinweise.
 
Zuletzt bearbeitet:

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Ist halt alles relativ und ich weiss ja nicht wie viele potentiell unnötige Requests gemacht werden und wie viel Wartezeit zumutbar ist.

Wie aktuell müssen denn die Tooltip infos überhaupt sein?
Kann man die nicht einfach direkt in die Seite packen?
Netzwerklatenzen werden in der gesamten absehbaren Zukunft übers Internet noch eine ganz ordentliche Rolle spielen, bei jedem Request ca15-100ms da kommt schnell ganz schön was zusammen.

Wenn du das höchstens ein paar dutzend mal pro aufruf machst wird das natürlich kaum auffallen. require_once() ist halt auch weniger das Problem als sinnlose requests.
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #17
Die Tooltips zeigen u.a. die in der DB gesetzten Änderungen an. Also quasi topaktuell :D Es werden pro Aufrufe zwischen 0 und 50 sein. Also, selbst wenn das jetzt minimal langsamer wird, weiß ich jetzt schon mindestens 5 Stellen, an denen ich def. die Performance verbessern kann :D Dann gehe ich lieber da ran. An dem Projekt arbeite ich seit 5 Jahren. Angefangen mit sehr sehr wenig Erfahrung und denke jetzt, dass ich ganz gut zurechtkomme - zumindest bis zum nächsten Corner Case ;) Daher gibt es alte Stellen, die noch recht krude aussehen und bessere, die im letzten Jahr entstanden.

Ich programmiere nicht für Geld und im Auftrag - daher bin ich da relaxter. Es ist ein Hobby.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Solange die nicht sequenziell sind kommen durch die Latenzen auch keine großen Wartezeiten zusammen, ich kenne halt due Programmstruktur und die use cases nicht.

Nur wenn ich halt höre das bei einem Ajax Tooltip ein include mehrfach durchgeführt wird dann geht meine Alarmstufe auf Orange vielleicht ist das ligitm, vieleicht ist es aber auch so großer mist das ich es mir garnicht vorstellen kann. Nach 5 Jahren solltest du eine ungefähre Ahnung haben was manche Leute für Talente haben. Oder wie dumm erste Ideen sein können.:p
Gerade bei Projekten ohne strikte Deadlines sollte man aus Qualitätsgründen auch mal altes Zeug neu schreiben wenn man feststellt das es scheisse ist.
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Mal fern davon ab, wenn die Seite beim frischen "Neuladen" funktioniert, wer würde denken das Ajax die PHP Seite bricht? Ich jedenfalls nicht... :) interessant zu wissen ist es dennoch. ;)

Aber PHP ist halt Serverseitig, während Ajax Clientseitig funktioniert, normalerweise dürfte ein Ajax-Request PHP gar nicht dazwischenfunken, bis auf PHP Dateien aufrufen die irgendwas zurückgeben/speichern? :unknown:

Warum wird PHP auf Serverseite verwirrt dadurch? Vielleicht nur naive Kritik... aufgrund mangelnder Kenntnis... aber 2 Requests sollten "eigenständige" Handlungen seien, da sollte nichts brechen! IMO.

Wobei gut, das ist wahrscheinlich auch eine Server/PHP Caching Ding, wenn die PHP Datei zum ersten mal ausgeführt wird und die andere PHP Datei "inkludiert" wird - und diese "nochmal" inkludiert wird beim zweiten Aufruf? Nur falls es was mit Caching zu tun hat, wie lange wäre das "require_once" denn gültig? Und wird es dann erneut inkludiert nach einem Zeitraum von X?
 
Zuletzt bearbeitet:

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #20
Soweit ich weiß, ist der Unterschied zwischen require und require_once nur, dass bei letzterem nur inkludiert wird, wenn es noch nicht inkludiert ist.
 
Oben