zwei DIVs gleichzeitig ansprechen?

unrealzero_php

Erfahrenes Mitglied
Hallo zusammen

Auf der Suche nach einem Lösungsansatz wäre ich froh um eure Hilfe.

Ich habe 3 Elemente: search, box1, box2 (siehe Grafik anbei). Das erste Element (id=“search“) ist ein Input-Feld welche über einen onkeyup=““ den Suchbegriff an eine Datenbank-Abfrage leitet. Das Ergebnis dieser Abfrage wird im Div-Container (id=“box1“) dargestellt dies funktioniert soweit ohne Probleme.

Nun liefert mir diese Abfrage auch gleich die Anzahl der gefundenen Datensätze. Diesen Wert möchte ich in id=“box2“ anzeigen.

Wie ist es möglich aus über AJAX zwei Div-Container anzusprechen bzw. gibt es die Möglichkeit einen erhaltenen Wert aus box1 an die box2 zu übergeben?
 

Anhänge

  • Untitled-1.jpg
    Untitled-1.jpg
    7,5 KB · Aufrufe: 38
Schreibst Du die Ajax-Rückgabe gleich in die Divbox 1 oder hast Du einen Zwischenschritt ? Wenn Du Dir ein Array zurückgeben lässt ( Anzahl, Inhalt ), dann sollte es kein Problem sein, Inhalt in divbox1 und Anzahl in divbox2 auszugeben.

Code:
document.getElementById('divbox1').innerHTML=Ajax[0];
document.getElementById('divbox2').innerHTML=Ajax[1];
Sorry, ist ein bissel Pseudocode, aber zeigt den Weg auf. Ich mache mir selten die Mühe, schnell gesetzten Code auf Richtigkeit zu überprüfen..

mfg chmee
 
Moin,


du könntest aus der Antwort(wie immer auch diese aussehen mag) die Anzahl "extrahieren".
Wie das genau ginge, und ob es überhaupt geht, hängt halt davon ab, wie die Antwort aussieht.

Elegant wäre dies allerdings nicht unbedingt :-)

Besser wäre es, wenn die Serverantwort in einem sinnvollen Format erfolgt.

Da gäbe es zum Einen einen JSON-codierten String, über diesen könntest du ein Objekt/Array übermitteln, und dieses Bequem verarbeiten.

Auch eine XML-Struktur, welche die benötigten Daten beinhaltet wäre möglich,
JSON halte ich auf deine Beschreibung hin aber für empfehlenswerter.
 
Ich rufe zuerst die Datei adresse.php auf welche die Datensätze sowie die Anzahl Datensätze auflistet.



Code:
function Search()
  {
  searchvalue = document.getElementById('search').value;
                  resObjekt.open('get', 'adresse.php?search='  + searchvalue);
                  resObjekt.onreadystatechange = ShowOutput;
                  resObjekt.send(null); 
  }
   
  function ShowOutput()
  {
                  if(resObjekt.readyState == 4)
                  {
                                 document.getElementById(box1).innerHTML = resObjekt.responseText;
                  }
  }
 
Bau Dir einen eindeutigen Unterbrecher in die php, lass Dir dann die Antwortdaten in zwei Teile unterteilen also zB

Ausgabetext der php ( response ):
Code:
44[*]bla bla das ist der Text und so weiter
Somit lässt Du Dir responseText an der Stelle teilen und dann in die Divboxen schreiben.. Du kannst in JS die Position des Trenners per indexof() auslesen und per substring() die Teile extrahieren. Somit musst Du nicht gleich auf JSON oder XML zurückgreifen, was bei der geringen Arraygröße -meiner Ansicht- Overdosed wäre.

mfg chmee
 
Interessanter wäre es, wenn du postest, womit adresse.php antwortet ;)
Hier das vereinfachte Script...
PHP:
<?php
    function searchqry($qry,$type,$cols)
    {
        $searchres = explode(' ', trim($qry));
        
        if(trim($qry) != '')
        {        
            $where = '(';
            $p = 1;
            foreach($searchres as $value)
            {
                if($p != 1 && $value != '')
                {
                    $where .= ') AND (';
                    $p = 1;        
                }
                
                foreach($col = explode(',',$cols) as $field)
                {
                    if($value != '')
                    {
                        if($p == 1)
                        {
                            $where .= $field.' LIKE \'%'.$value.'%\'';    
                            $p++;                
                        }
                        else
                        {
                            $where .= ' OR '.$field.' LIKE \'%'.$value.'%\'';        
                        }
                    }
                }
            }
            
            $where .= ')';
            
            return ' '.$type.' '.$where;
        }
        else
        {
            return '';        
        }
    }
    
    $where = searchqry($_GET['search'],'WHERE','`name`,`vorname`,`adresse`,`plz`,`ort`');
    
    echo '<table>
            <tr>
                <th>Name</th>
                <th>Vorname</th>
                <th>Adresse</th>
                <th>PLZ</th>
                <th>Ort</th>
            </tr>';
            
            $res = mysqli_query($coredb,'SELECT SQL_CALC_FOUND_ROWS(`ID`),`name`,`vorname`,`adresse`,`plz`,`ort` FROM `tbl_adresse` '.$where.' ORDER BY `name` ASC');
                                                        
            $count = mysqli_fetch_array(mysqli_query($coredb,'SELECT FOUND_ROWS()'));
            
            while($row = mysqli_fetch_array($res))
            {
                $name = $row['name'];
                $vorname = $row['vorname'];
                $adresse = $row['adresse'];
                $plz = $row['plz'];
                $ort = $row['ort'];
                
                echo '<tr>
                        <td>'.$name.'</td>
                        <td>'.$vorname.'</td>
                        <td>'.$adresse.'</td>
                        <td>'.$plz.'</td>
                        <td>'.$ort.'</td>
                    </tr>';
                        
            }
            
    echo '</table>';
    
    $AnzahlDatensaetze = $count[0];
?>
 
Uninteressant. Nicht der php.code war gefragt, sondern die Antwort, also die Ausgabe des php-Codes. Unterm Strich muss Dein php-code zwei Daten erzeugen und diese per Trenner ausgeben.

PHP:
<?php
/* -----   Anzahlquery */
echo ($anzahl);
/* ------   Trenner */
echo ('[*]');
/* -------   Inhaltquery, also Dein obiger Code */
echo ($inhalt);
?>
unrealzero : Ich meine das durchaus nicht böse, aber Deine Fragestellung bezieht sich nicht auf die 1.Ebene ( Code ), sondern eher auf die Darüberliegende - wie kommuniziert Funktion 1 (JS-Ajax) mit Funktion 2 (php-query). Deswegen also die grobe Richtung : php-code wirft beide Daten unterteilt aus und im JS-Teil müssen aus dem Antworttext beide Daten extrahiert werden. Es gilt eigentlich nur, im php-Teil beide Daten abzufragen, jene mit diesem Trenner zu unterscheiden, damit man im JS-Teil eindeutig auf 2 Werte zugreifen kann.

mfg chmee
 

Neue Beiträge

Zurück