• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

onload-befehl ein 2.mal ausführen

Status
Für weitere Antworten geschlossen.

Durek

Neues Mitglied
hallo =)
ich habe ein Script geschrieben, wobei ich über eine Funktion eine Datei in einen Div include.
soweit so gut....

Code:
<div id="mapstates">Wird geladen...</div>
....
<body onload="mapstateinclude('mapstatus.php');">
....
</body>
klappt prima... nach dem, die Seite geladen ist, wird die Datei includet..
nun mache ich allerdings einen 2. <body onload="mapstateinclude('mapstatus.php');"></body> rein, der durch einen anderen Dateinclude entstanden ist. Allerdings funktioniert dieser nicht.

muss ich nun das andere (1.) versuchen wegzumachen und durch das neue zu ersetzen oder was ist nun mein Ziel?
 
Werbung:
versteh ich nicht ganz, du hast in einem Dokument 2 <body> tags damit du 2 mal onload ausführen kannst?!
 
versteh ich nicht ganz, du hast in einem Dokument 2 <body> tags damit du 2 mal onload ausführen kannst?!

wie soll ich das sagen >.<....
ich habe ein Browsergame gemacht und immer wenn man Sachen kauft soll auch die Ausrüstung aktualisiert werden und das geschieht bei mir mit dem Befehl.
mapstateinclude('mapstatus.php');
mit onclick="" geht das ja aber nachdem ich auf den Button Ja, ich möchte es kaufen klicke, wird erstmal in der MySQL-Datenbank alles so verändert, dass man das Item dann besizt. Dies habe ich auch mit Include in einen DIV gemacht, damit ein Neuaufruf nicht nötig ist. Allerdings möchte ich direkt, wenn die Erfolgsnachricht (erfolgreich gekauft) kommt den Befehl mapstateinclude('mapstatus.php'); ausführen.
 
Werbung:
ich glaub du hast dich da etwas mit php und js verzwickt, schick mal den code

nunja es sind über 15 Dateien xD

aber ich sag es mal so...

Code:
<body onload="mapstateinclude();"></body>
<div id="mapstates">Daten werden geladen</div>
<div id="include"></div>
JS
Code:
function mapstateinclude()
{
  Object1.open('GET','mapstatus.php', true);
  Object1.onreadystatechange = mapstateshowinclude;
  Object1.send(null);
}

function mapstateshowinclude()
{
  if (Object1.readyState == 4)
  {
    document.getElementById('mapstates').innerHTML = Object1.responseText;
  }
}
{



function include(path)
{
  Object1.open('GET',path, true);
  Object1.onreadystatechange = showinclude;
  Object1.send(null);
}

function showinclude()
{
  if (Object1.readyState == 4)
  {
    document.getElementById('include').innerHTML = Object1.responseText;
  }
}
Code:
<img src="bild.gif" onclick="include('interface.php?interface=vendor&mode=buy');">
interface.php
Code:
<?PHP
$include = 1;
$needed_rang = 2;
include("protection.php");
require("./global.php");
if($_GET['interface'] == "vendor") {
$vendoroption = $db->query_first("SELECT * FROM vendors WHERE id='$_GET[vendorid]'");
if($vendoroption[mapid] == "$user[map]") {
echo "<div id='vendorwindow' style='position:absolute;top:0px;z-index:99;left:0px;height:360px;width:200px;opacity:0.8;filter:Alpha(opacity=80, finishopacity=80, style=3);background-color:#ffffff;overflow:auto;'>
<img align='right' src='images/exit.gif' onclick=\"hide('vendorwindow');\">
<hr>";
if($_GET['mode'] == "browse") {
echo "<table style='width:100%;border:0px;'>";
    $vendors_item = mysql_query("SELECT * FROM vendor_items WHERE vendorid='$_GET[vendorid]'");

while ($row = mysql_fetch_array ($vendors_item)) {
    $item = $db->query_first("SELECT * FROM items WHERE id='$row[itemid]'");
$iteminfo = "<b>$item[name]</b>";

if($item['class'] == "1")
$iteminfo .= "<br>Waffe";
if($item['class'] == "2")
$iteminfo .= "<br>Schuhe";
if($item['class'] == "3")
$iteminfo .= "<br>Brustschutz";
if($item['class'] == "4")
$iteminfo .= "<br>Kopfbedekung";
if($item['class'] == "5")
$iteminfo .= "<br>Schmuck";

if($item[dmg_min]>0 OR $item[dmg_max]>0)
$iteminfo .= "<br>$item[dmg_min] - $item[dmg_max] Schaden";

if($item[armor]>0)
$iteminfo .= "<br>$item[armor] Ruestung";
if($item[description] !== "")
$iteminfo .= "</font><br><table border=0 width=250><tr><td><font color=00CC00 size=2>$item[description]</font></td></tr></table><font color=FFFFFF>";

$money=$item['price'];
$platin=0; $silber=0; $gold=0;
$money2 = "";

$silber=$money%100;
$gold=(($money-$silber)/100)%100;
$platin=($money-$silber-$gold*100)/10000;

if($money>=10000)
$money2 = "".$platin." Platin ";

if($money>=100)
$money2 .= "".$gold." Gold ";

if($money>0)
$money2 .= " ".$silber." Silber";
else
$money2 = "Kostenlos";

echo "<tr onclick=\"hideddrivetip();include('interface.php?interface=vendor&mode=buy&mode2=ask&vendorid=".$_GET[vendorid]."&vendoritemid=".$row[id]."','include');\"><td bgcolor='#E5E5E5' onmouseover=\"ddrivetip('<font color=000000>$iteminfo</font>')\" onmouseout=\"hideddrivetip()\"><center><img src='images/itemicons/$item[icon]' border='0'></center></td><td onmouseover=\"ddrivetip('<font color=000000>$iteminfo</font>')\" onmouseout=\"hideddrivetip()\"><font size='2'>$item[name]</font></td><td align='center' class='menue_02'><img onmouseover=\"ddrivetip('<font color=000000><b>Preis</b><br>$money2</font>')\" onmouseout=\"hideddrivetip()\" src='images/itemicons/money.gif' alt='Preis'></td></tr>";

}
echo "</table>";
} elseif($_GET['mode'] == "buy") {
$vendoritem = $db->query_first("SELECT itemid FROM vendor_items WHERE id='$_GET[vendoritemid]' AND vendorid='$_GET[vendorid]'");
$item = $db->query_first("SELECT name,price FROM items WHERE id='$vendoritem[itemid]'");
$money=$item['price'];
$platin=0; $silber=0; $gold=0;
$money2 = "";

$silber=$money%100;
$gold=(($money-$silber)/100)%100;
$platin=($money-$silber-$gold*100)/10000;

if($money>=10000)
$money2 = "".$platin." Platin ";

if($money>=100)
$money2 .= "".$gold." Gold ";

if($money>0)
$money2 .= " ".$silber." Silber";
else
$money2 = "Nichts";

if($_GET['mode2'] == "ask")
echo "Willst Du wirklich das Item \"<i>".$item[name]."</i>\" zum Preis von \"<i>$money2</i>\" kaufen?<br>
<button onclick=\"include('interface.php?interface=vendor&mode=buy&mode2=buy&vendorid=".$_GET[vendorid]."&vendoritemid=".$_GET[vendoritemid]."','include');mapstateinclude();\">Ja</button><button onclick=\"include('interface.php?interface=vendor&mode=browse&vendorid=".$_GET[vendorid]."','include');\">Nein</button>";
if($_GET['mode2'] == "buy") {
if($item['price']>$user['money']) {
echo "Du hast leider nicht genug Geld um \"".$item[name]."\" zu kaufen!";
} else {
$useritem = $db->query_first("SELECT id FROM user_items WHERE itemid='$vendoritem[itemid]' AND userid='$user[id]'");
if($useritem['id']>0)
$db->query("UPDATE user_items SET pieces=pieces+1 WHERE id='$useritem[id]'");
else
$db->query("INSERT INTO `user_items` (`userid`,`itemid`,`pieces`) VALUES ('$user[id]','$vendoritem[itemid]','1')");

$db->query("UPDATE user SET money=money-$item[price] WHERE id='$user[id]'");
echo "<i>Du hast das Item erfolgreich gekauft. Es befindet sich nun in deinem Inventar.</i>";
echo "<body onload=\"mapstateinclude();\"></body>";
}

}

}

echo "</div>";

} else {
echo "<div id='vendorwindow' style='position:absolute;top:0px;z-index:99;left:0px;height:360px;width:200px;opacity:0.8;filter:Alpha(opacity=80, finishopacity=80, style=3);background-color:#ffffff;overflow:auto;'><img align='right' src='images/exit.gif' onclick=\"hide('vendorwindow');\"><hr>
<br>Du darfst den Ort nicht verlassen, in dem Du den Verkaeufer angeklickt hast, um mit ihm zu handeln. Haendler haben immer die Kategorie der Items, die diese anbieten in gruener Schrift ueber dem Personenbild.</div>";
}
}
?>

<body onload=\"mapstateinclude();\"></body>
Hier in der interface.php siehst du, dass ich dann den Befehl nochmal aufrufen möchte nachdem die SQL-Querys zuende sind.
 
vlt solltest du daraus:
PHP:
echo "<body onload=\"mapstateinclude();\"></body>";
einfach ein
PHP:
echo "<script type=\"text/javascript\">mapstateinclude();</script>";
machen

PS: bei so einem großen projekt bietet sich OOP ganz gut an, ist übersichtlicher...
 
Werbung:
vlt solltest du daraus:
PHP:
echo "<body onload=\"mapstateinclude();\"></body>";
einfach ein
PHP:
echo "<script type=\"text/javascript\">mapstateinclude();</script>";
machen

du bist schlau ich ein Idiot und ich danke dir^^
daran hab ich gar nicht gedacht und es war so einfach xD

edit: klappt nicht... ich nehme an, dass ich wegen dem Include keine Befehle mehr so ausführen kann... das Problem ahtte ich schonmal.
 
ja das kenn ich liegt am ajax, du müsstest eine 2. Funktion schreiben die das gleiche macht, aber ein anderes xmlRequestObject benutzt, dann funktioniert es
 
ja das kenn ich liegt am ajax, du müsstest eine 2. Funktion schreiben die das gleiche macht, aber ein anderes xmlRequestObject benutzt, dann funktioniert es

ok... das ist gut, dass du darüber bescheidweißt... ich hatte schon die Angst, dass das jetzt keiner weiß... naja... ich hab zwar nicht so viel Ahnung von JavaScript und Ajax aber ich sehe in Tutorials und andern Scripten immer sofort, was diese Scripte bewirken...
meinst du in etwa sowas?
Code:
// globale Instanz von XMLHttpRequest
var xmlHttp = false;

// XMLHttpRequest-Instanz erstellen
// ... für Internet Explorer
try {
    xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
    try {
        xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
        xmlHttp  = false;
    }
}
// ... für Mozilla, Opera und Safari
if (!xmlHttp  && typeof XMLHttpRequest != 'unbekannt') {
    xmlHttp = new XMLHttpRequest();
}
wenn nicht... kannst du mir dann ein Beispiel geben?^^

aufjedenfall schon bis jetzt ein großes Danke
 
Werbung:
ja genau sowas, damit hast du eine isntanz von dem object, also xmlHttp. Damit arbeitet deine funktion mapstateinclude, wenn du sie jetzt aber nochmal aufrufst, ist das xmlHttpObject in benutzung, und kann somit nicht nochmal ausgeführt werden. Also brauchst du eine 2. funktion "mapstateinclude2", die genau das macht, was auch mapstateinclude macht, aber nicht mit xmlHttp sondern mit xmlHttp2 - also noch ne andere instanz vom xml http request object
 
ich teste es und gebe das Ergebniss mit einem "edit" bekannt^^ ich danke dir auf jedenfall nochmal

edit: somit habe ich zumindest ein anderes Problem behoben... xD
ich habe es so gemacht:
Code:
// globale Instanz von XMLHttpRequest
var xmlHttp2 = false;

// XMLHttpRequest-Instanz erstellen
// ... für Internet Explorer
try {
    xmlHttp2  = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
    try {
        xmlHttp2  = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
        xmlHttp2  = false;
    }
}
// ... für Mozilla, Opera und Safari
if (!xmlHttp2  && typeof XMLHttpRequest != 'unbekannt') {
    xmlHttp2 = new XMLHttpRequest();
}

function include2(path,divid)
{
 if (xmlHttp2) {
     xmlHttp2.open('GET',path, true);
     xmlHttp2.onreadystatechange = function () {
         if (xmlHttp2.readyState == 4) {
             document.getElementById(divid).innerHTML = xmlHttp2.responseText;
         }
     };
     xmlHttp2.send(null);
 }
}
aufgerufen dann mit
Code:
<script type=\"text/javascript\">include2('mapstatus.php','mapstates');</script>
der DIV mit der id mapstates ist natürlich im HTML-Code enthalten.

ich habe eine Funktion gemacht, die noch gar nicht benutzt wurde und die Variable xmlHttp2 auch nicht.
 
Zuletzt bearbeitet:
@ Frank:
Du hast ja OOP (Objektorientierte Programmierung) erwähnt.
Ich würde gerne mal wissen, wozu sich OOP eignet und wie man es lernen kann.

Was ist der Unterschied zwischen OOP und normalem PHP?



MfG, matibaski
 
Werbung:
#php/QuakeNet Tutorial - OOP

@Durek

schön das du mir sagst das du ein anderes Problem behoben hast, aber was ist mit dem aktuellen problem?

Nein das aktuelle Problem habe ich leider nicht behoben aber ich hatte viele verschiedene Funktionen über 1 Instanz und das nun nicht mehr...das war das andere Problem. Ich hoffe aber, dass ich das aktuelle nun noch lösen kann.

edit: also... ich habe über eine neue Instanz nun den Include durchgeführt und der Befehel von JS innerhalb des Includes klappt immernoch nicht.
 
Zuletzt bearbeitet:
Werbung:
mach den Firefox auf, geh auf eine beliebiege seite. Geh auf Extras->Fehlerkonsole. Klick auf alles löschen. Geh auf deine Seite die Probs macht, Fehlerkonsole wieder anzeigen, fehler kopieren, hier posten - order selber beheben.
 
mach den Firefox auf, geh auf eine beliebiege seite. Geh auf Extras->Fehlerkonsole. Klick auf alles löschen. Geh auf deine Seite die Probs macht, Fehlerkonsole wieder anzeigen, fehler kopieren, hier posten - order selber beheben.

ich habe das Problem gefunden...
irgendwie führt der die alte function noch aus
mapstateinclude();
aber der neue:
include_02('mapstatus.php','mapstates');

echt steht zwar anders in der Datei und gecachet hat der die datei normalerweise auch nicht aber... ich habe die alte function nochmal in mein JS-Script gepackt und somit klappt es jetzt wenigstens

edit: kannst du mir aber sagen, was das bedeutet?

Fehler: uncaught exception: [Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: http://127.0.0.1/game/scripts/include.js :: include_02 :: line 23" data: no]

edit2: ich fand nun heraus, dass ich mal ein onclick="mapstateinclude();" gemacht habe und der ist vor den MySQL-Querys.... anscheinend braucht JS lang genug, dass die Querys trotzdem fertig sind... allerdings finde ich, dass das keine Lösung ist.
es klappt nciht und gibt keinen fehler aus...

edit3: der Fehler mit dem Befehl vor den MySQL-Querys klappt außerdem nicht im Internet Explorer
 
Zuletzt bearbeitet:
Werbung:
die queries sind immer fertig vor javascript, php wird nämlich vorher geparst, dann erst js.

Aber langsam bin ich ratlos was die ganzen fehler angeht, vlt solltest du nochmal das ganze js löschen und neu schreiben, meistens gehts dann wie aus zauberhand ;) :oops:
 
die queries sind immer fertig vor javascript, php wird nämlich vorher geparst, dann erst js.

Aber langsam bin ich ratlos was die ganzen fehler angeht, vlt solltest du nochmal das ganze js löschen und neu schreiben, meistens gehts dann wie aus zauberhand ;) :oops:

naja... zu dem PHP geparst... es sind 2 PHP-Dateien gleichzeitig... die eine Funktionion leitet auf die MySQL-Querys und die andere aktualisiert die "Ergebnisse"
im FireFox wird dann die Seite mit den MySQL-Querys, die bearbeiten sollen schneller geladen als die, die die neuen Daten auslesen sollen.. dabei sind allerdings nur ein paar Millisekunden Abstand, weil PHP ja richtig schnell ist und somit rennen die "Dateien um die Wette" xD
Neuschreiben würde ich eigentlich sehr gern, weil sich da schon langsam oder sicher jede Menge Mist angesammelt hat ^^
Das Problem ist nur, dass ich eigentlich nicht so viel über Ajax / JS weiß und naja... du sagstest, dass du wüsstest, dass meine Ajax-include, JavaScript blockiert...kannst du da ein Beispiel der Blockade geben und, wie du es beheben würdest nennen?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben