Tobias Otto: AJAX Probleme

Hallo ich lasse mit ajax eine php datei ausführen und danach mit include eine php datei laden.
problem ist, dass bei der include php datei nur ein teil ausgegeben wird. wenn ich in der include php datei in der ersten zeile das "<table> " wegmach wird die datei komischerweise komplett geladen. Also muss es an dem wort <table> liegen.
aber warum??

// diese datei wird include geladen
echo "
<table style='font-size: 10px;'>   <---------------- ohne diese Zeile funktioniert es ohne probs
<tr>
<td style='background: rgb(210,210,210); padding: 2px; '>
<b>Attributbezeichnung</b>
</td>
<td style='background: rgb(210,210,210); padding: 2px; '>
<b>Preis</b>
</td>
<td style='background: rgb(210,210,210); padding: 2px;' >
<b>Menge</b>
</td>
<td style='background: rgb(210,210,210); padding: 2px;'>
<b>Lieferumfang</b>
</td>
<td>
</td>
</tr>

<form name='attributadd'>
<tr>
<td>
<input type='text' name='attributbezeichnung' style='width: 200px; border: solid 1px rgb(150,150,150);'/>
</td>
<td>
<input type='text' name='attributpreis' style='width: 50px; border: solid 1px rgb(150,150,150);'/>
</td>
<td>
<input type='text' name='attributmenge' style='width: 50px; border: solid 1px rgb(150,150,150);'/>
</td>
<td>
<input type='text' name='Lieferumfang' style='width: 250px; border: solid 1px rgb(150,150,150);'/>
</td>
<td>
<span onclick='attributadd2()' style='cursor: pointer;'><img src='../gfx/site/haken.gif' /></span>
</td>
</tr>
<input type='hidden' name='Artikel' value='$anr' />
<input type='hidden' name='Attributnr' value='$Attributnr' />
</form>
";

$atrres  =  mysql_query("SELECT * FROM artikel_attribut WHERE Artikel='$anr' ORDER BY Attributbezeichnung");

$style = "style='background: rgb(230,230,230); padding: 2px; '";

echo"

<form name='attributedit$row[Attributnr]'>
<tr>
<td $style >
<input type='text' name='attributbz' value='$row[Attributbezeichnung]' onfocus='attributfocus($row[Attributnr],this)' onblur='attributedit($row[Attributnr],this)' style='width: 200px; ' class='editattribut' />
</td>
<td $style>
<input type='text' name='attributpreis' value='$row[Preis]' onfocus='attributfocus($row[Attributnr],this)' onblur='attributedit($row[Attributnr],this)'  style='width: 50px; ' class='editattribut'/>
</td>
<td $style>
<input type='text' name='attributmenge' value='$row[Menge]' onfocus='attributfocus($row[Attributnr],this)' onblur='attributedit($row[Attributnr],this)'  style='width: 50px; ' class='editattribut'/>
</td>
<td $style>
<input type='text' name='attributlieferu' value='$row[Lieferumfang]' onfocus='attributfocus($row[Attributnr],this)' onblur='attributedit($row[Attributnr],this)'  style='width: 230px; ' class='editattribut'/>

</td>
<td $style>
<span onclick='attributdel($row[Attributnr])' style='cursor: pointer;'><img src='../gfx/site/del.gif' /></span>
</td>
</tr>
</form>
";
}

// diese Datei wird von AJAX ausgeführt
require("db.inc.php");
$anr = $_REQUEST['artikel'];
$attribut = $_REQUEST['attributnr'];
$res = mysql_query("DELETE FROM artikel_attribut WHERE Artikel='$anr' AND Attributnr='$attribut' ;",$db);
if($res) {
include("attribut.php");
}

// AJAX

function attributdel(i) {
 if (window.XMLHttpRequest) { // Mozilla, Safari, ...
     http_request = new XMLHttpRequest();
 } else if (window.ActiveXObject) { // IE
     http_request = new ActiveXObject("Microsoft.XMLHTTP");
 }

http_request.onreadystatechange= attributdel2;
 http_request.open("GET", "attributdel.php?attributnr=" + i + "&artikel=" + document.forms.attributadd.Artikel.value );
 http_request.send(null);
}

function attributdel2() {

if (http_request.readyState == 4) {

var  sh = document.getElementById("attribut");
 sh.innerHTML = http_request.responseText;
 }
}

  1. Hellihello Tobias,

    mMn ist das kein Ajax-Problem, sondern ein PHP Problem.

    Deinen Code könntest du erleichtern, indem du die Styleangaben in ein externes Stylesheet auslagerst (und sei es nur zu Testzwecken).

    Dann baust du die Tabelle kleinteilig als Testtabelle auf und erweiterst sie solange, bis der Fehler auftaucht oder eben nicht.

    <table style='font-size: 10px;'>   <---------------- ohne diese

    Diese  Zeile scheint allerdings erstmal o.k. so. Der Rest aber scheint mir für die Isolation dieses Problem irrelevant; deshalb hast Du bei den Massen an Quelltext vielleicht auch bisher keine Antwort erhalten.

    Gruß,

    frankx

  2. Hallo Tobias,

    Die HTML-Elemente sind wohl falsch verschachtelt:

    // diese datei wird include geladen
    echo "
    [code lang=html]<table style='font-size: 10px;'>   <-- ohne diese Zeile funktioniert es ohne probs -->
    <tr>[...]
    </tr>
    <form name='attributadd'>
    <tr>[...]
    </tr>
    <input type='hidden' name='Artikel' value='$anr' />
    <input type='hidden' name='Attributnr' value='$Attributnr' />
    </form>

    
    > ";[/code]  
      
    Zwischen zwei Tabellenzeilen <tr> darf kein Formular stehen, sagt jedenfalls [Der Martin hier](http://forum.de.selfhtml.org/archiv/2007/9/t159397/#m1036928).  
      
    Gruß, Don P