# AJAX Live Search

**URL:** <https://forum.oxid-esales.com/t/ajax-live-search/42979>\
**Category:** Deutsches Forum\
**Tags:** development\
**Created:** [April 9, 2010, 4:33pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979 "2010-04-09T16:33:57Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 9, 2010, 4:33pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/1 "2010-04-09T16:33:57Z")

</div>

Hallo ich hab mir ne kleine AJAX Live Search zusammengebaut, was soweit auch funktioniert, nur leider nicht wenn man sich in Kategorien oder auf Content Seiten befindet.

Hier mal der Code: ( die Datei liegt in out/template/src/ )

```html
function searchFor(suchbegriff) {
	var xmlHttp = null;
	// Mozilla, Opera, Safari sowie Internet Explorer 7
	if (typeof XMLHttpRequest != 'undefined') {
		xmlHttp = new XMLHttpRequest();
	}
	if (!xmlHttp) {
		// Internet Explorer 6 und älter
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				xmlHttp = null;
			}
		}
	}
	// Wenn das Objekt erfolgreich erzeugt wurde
	if (xmlHttp) {
		var url = "ajaxlivesearch.php";
		var params = "suchbegriff=" + suchbegriff;

		xmlHttp.open("POST", url, true);

		// Headerinformationen für den POST Request
		xmlHttp.setRequestHeader("Content-type",
				"application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", params.length);
		xmlHttp.setRequestHeader("Connection", "close");

		xmlHttp.onreadystatechange = function() {
			if (xmlHttp.readyState == 4) {
				// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis"
				// geschrieben
				if (xmlHttp.responseText.length > 2) {
					document.getElementById("ergebnis").style.visibility = "visible";
					document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
				} else {
					document.getElementById("ergebnis").style.visibility = "hidden";
				}
			}
		};
		xmlHttp.send(params);
	}
}

```

Ich habe da ja var = ajaxlivesearch.php  
das klappt auch wenn ich auf der Startseite bin aber wenn ich zum Beispiel in einer Kategorie bin kommt folgendes:

> Die angeforderte Seite ‘DVD-oxid/ajaxlivesearch.php/’ konnte nicht gefunden werden.

Wie umgeh ich diesen Fehler??  
Danke schon mal für Hilfe…

Gruß Gruß

---

<div class="post-metadata">

**Author:** ![csimon](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/c/53a042/32.png) [@csimon](https://forum.oxid-esales.com/u/csimon)\
**Post date:** [April 9, 2010, 4:40pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/2 "2010-04-09T16:40:38Z")

</div>

du musst den fixen urlpfad angeben. also “[http://meinshop.de/ajaxlivesearch.php](http://meinshop.de/ajaxlivesearch.php)”. sollte aber auch “/ajaxlivesearch.php” gehen. Und übrigens: Bei oxid ist Jquery dabei, da ist der ajax request vllt ein 5zeiler 😉

---

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 9, 2010, 5:01pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/3 "2010-04-09T17:01:38Z")

</div>

Alles klar, danke!

Nächstes Problem :

Nun habe ich ja noch eine PHP Datei dazu für den Datenbank Zugriff…klappt auch soweit, nur wie komm ich an die URL der Produkte ? kann ja mit der datei nicht auf die oxarticle Klasse zugreifen und mir die ausspucken lassen…

```php
	// Server Verbindung herstellen
	mysql_connect($db['server'], $db['user'], $db['pass']) or
	die ("Keine Verbindung moeglich");

	// Datenbank Verbidung
	mysql_select_db($db['name']) or
	die ("Die Datenbank existiert nicht");

	$tabelle = "oxarticles";
	$searchString = explode(" ", $_POST['suchbegriff']);
	$sWhere = "";
	foreach($searchString as $s) {
		if($sWhere != "") {
			$sWhere .= " AND ";
		}
		$sWhere .= " OXTITLE LIKE ('%".mysql_real_escape_string(utf8_decode($s))."%') ";
	}
	$sql = "SELECT * FROM ".$tabelle." WHERE ".$sWhere." LIMIT 0,5";
	$result = mysql_query($sql);
	echo "<strong>Sie suchten nach: ".$_POST["suchbegriff"]."</strong><br/><br/>";
	while($row = mysql_fetch_object($result)){
		echo utf8_encode($row->OXTITLE);
		echo "<br/>";
	}

```

Ist bisher nur so zum testen…

---

<div class="post-metadata">

**Author:** ![csimon](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/c/53a042/32.png) [@csimon](https://forum.oxid-esales.com/u/csimon)\
**Post date:** [April 9, 2010, 5:25pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/4 "2010-04-09T17:25:08Z")

</div>

mach doch nen eigenen view dafür. nennste highknee\_ajaxlivesearch.php und nutzt dann folgende url:

/index.php?cl=highknee\_ajaxlivesearch.

die klasse hat nix ausser ne render methode und gibt direkt einfach das xml aus. was übrigens für eine livesuche die viele daten zurückliefern kann einen enormen overhead produziert, was die suche unnötig langsam machen wird.

---

<div class="post-metadata">

**Author:** ![avenger](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.oxid-esales.com/u/avenger)\
**Post date:** [April 10, 2010, 5:30am UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/5 "2010-04-10T05:30:17Z")

</div>

[QUOTE=csimon;29172]Und übrigens: Bei oxid ist Jquery dabei, da ist der ajax request vllt ein 5zeiler ;)[/QUOTE]  
Ist mir auch schon aufgefallen…

Konnte aber bisher noch keine Stelle im Shop finden, wo das auch verwendet wird…

Habe ich da was übersehen?

Aber die integrierte Version jQuery 1.2.6 ist eh’ schon so überaltert, dass sie stinkt…

Die aktuelle jQuery-Version 1.4.1 hat einige funktionelle Verbesserungen und (teilweise dramatische) Geschwindigkeitsverbesserungen zu bieten, man sollte also auf jeden Fall die aktuellen Versionen verwenden.

---

<div class="post-metadata">

**Author:** ![csimon](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/c/53a042/32.png) [@csimon](https://forum.oxid-esales.com/u/csimon)\
**Post date:** [April 10, 2010, 8:23am UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/6 "2010-04-10T08:23:47Z")

</div>

> [@avenger](#):
>
> Die aktuelle jQuery-Version 1.4.1 hat einige funktionelle Verbesserungen und (teilweise dramatische) Geschwindigkeitsverbesserungen zu bieten, man sollte also auf jeden Fall die aktuellen Versionen verwenden.

Machst du einen eintrag “tweak” im bugtracker oder soll ich? Seh ich nämlich auch so.

---

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 10, 2010, 11:49am UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/7 "2010-04-10T11:49:28Z")

</div>

Ich sag erstmal, vielen Dank…Habs noch nicht ausprobiert, aber hört sich gut an!

---

<div class="post-metadata">

**Author:** ![oxal](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/o/ba8739/32.png) [@oxal](https://forum.oxid-esales.com/u/oxal)\
**Post date:** [April 10, 2010, 12:10pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/8 "2010-04-10T12:10:31Z")

</div>

[QUOTE=csimon;29184]mach doch nen eigenen view dafür. nennste highknee\_ajaxlivesearch.php und nutzt dann folgende url:

/index.php?cl=highknee\_ajaxlivesearch.

die klasse hat nix ausser ne render methode und gibt direkt einfach das xml aus. was übrigens für eine livesuche die viele daten zurückliefern kann einen enormen overhead produziert, was die suche unnötig langsam machen wird.[/QUOTE]

Warum soll er seine php durch die index.php und alles dranhängende pipen? Besser ist es, die eine php direkt anzusprechen, ohne den Umweg über Oxid.

---

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 10, 2010, 12:13pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/9 "2010-04-10T12:13:21Z")

</div>

Hmm, das ist irgendwie komisch.  
Habs jetzt so mal probiert…

```php
class Ajaxlivesearch extends oxUBase
{
    protected $_sThisTemplate = 'ajaxlivesearch.tpl';

    public function render()
    {
        parent::render();
        return $this->_sThisTemplate;
    }

}

```

In die ajaxlivesearch.tpl folgendes geschrieben zum testen:

```html
VIEW KLASSEN TEST

```

Wenn ich jetzt den link

> [http://localhost/webshop/index.php?cl=ajaxlivesearch](http://localhost/webshop/index.php?cl=ajaxlivesearch)  
> kommt auch genau der Inhalt.

Aber bei meiner Live Search baut er eine komplette Seite quasi in dem Div auf also nicht nur

> VIEW KLASSEN TEST

Wodran könnte das liegen ?

---

<div class="post-metadata">

**Author:** ![avenger](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.oxid-esales.com/u/avenger)\
**Post date:** [April 10, 2010, 12:24pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/10 "2010-04-10T12:24:36Z")

</div>

[QUOTE=highknee88;29232]Hmm, das ist irgendwie komisch.  
Habs jetzt so mal probiert…

```php
class Ajaxlivesearch extends oxUBase
{
    protected $_sThisTemplate = 'ajaxlivesearch.tpl';

    public function render()
    {
        parent::render();
        return $this->_sThisTemplate;
    }

}

```

In die ajaxlivesearch.tpl folgendes geschrieben zum testen:

```auto
VIEW KLASSEN TEST

```

Wenn ich jetzt den link kommt auch genau der Inhalt.

Aber bei meiner Live Search baut er eine komplette Seite quasi in dem Div auf also nicht nur

Wodran könnte das liegen ?[/QUOTE]  
Mit " parent::render();" baust Du die normale Seite auf…

Du musst die Methode “render” überladen…

---

<div class="post-metadata">

**Author:** ![csimon](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/c/53a042/32.png) [@csimon](https://forum.oxid-esales.com/u/csimon)\
**Post date:** [April 10, 2010, 12:31pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/11 "2010-04-10T12:31:47Z")

</div>

> Warum soll er seine php durch die index.php und alles dranhängende pipen? Besser ist es, die eine php direkt anzusprechen, ohne den Umweg über OXID.

Weil er dann entweder das framework so initialisieren müsste, was denselben effekt hat wies gleich in einem view zu machen oder er alle querys etc selber schreiben müsste und den ganzen kram unabhängig vom shop würde warten müssen. und so kann er die oxid funktionen nutzen, ohne das framework zu initialisieren würd er sich da doppelte arbeit machen.

Übrigens: Ich würde das nicht über ein template machen sondern so:

```auto

    public function render() {
          // deine abfrage etc.pp
          header('Content-type: text/xml');
          echo $xml;
          exit;
    }

```

dann wird smarty wenigstens nicht angeschmissen.

---

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 10, 2010, 12:39pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/12 "2010-04-10T12:39:44Z")

</div>

Wenn ich das wegnehme, ändert das aber nicht. Und wenn ich sie per Link normal aufrufe kommt die restliche Seite ja auch irgendwie nicht…

---

<div class="post-metadata">

**Author:** ![oxal](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/o/ba8739/32.png) [@oxal](https://forum.oxid-esales.com/u/oxal)\
**Post date:** [April 10, 2010, 12:48pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/13 "2010-04-10T12:48:28Z")

</div>

[QUOTE=csimon;29237]Weil er dann entweder das framework so initialisieren müsste, was denselben effekt hat wies gleich in einem view zu machen oder er alle querys etc selber schreiben müsste und den ganzen kram unabhängig vom shop würde warten müssen. [/QUOTE]

Ich hatte es so verstanden, dass es um die Population einer Vorschlagsliste für das Suchfeld geht. Das muß ja auch fix gehen, da ist ein direkter Zugriff auf mySQL einfach schneller, und die ganzen Framework-Komponenten brauchts ja nicht, wenn zB nur nach OXARTNUM, OXTITLE, OXSEARCHKEYS etc. geschaut werden soll.

Gebe zu, daß man sich dann noch um die Umschaltung auf OXTITEL\_X usw. kümmern müßte, sofern man in den anderen Sprachen auch andere Daten hierfür hat.

Bis das Oxid-Framework eine Antwort liefert, vergehen für wirkliche Live-Search mMn zuviele Millisekunden.

Gruß,  
Achim

PS: Bin aber gespannt, ob es auch mit Eurem Ansatz geht.

---

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 10, 2010, 12:55pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/14 "2010-04-10T12:55:45Z")

</div>

Ja nur komm ich dann ja irgendwie nicht auf die OXSEO Url für die Artikel die gefunden werden…was ja schon recht hilfreich ist 😉 Außer ich bau die ganze seo encoder geschichte nach…

Aber bisher funktioniert das leider nicht mit der View ☹

---

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 10, 2010, 12:58pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/15 "2010-04-10T12:58:40Z")

</div>

Ich hab auch nicht wirklich das gefühl dass er die funktion render() in dem Fall aufruft, weil einfach die Startseite nochmal aufgebaut wird in dem DIV…

---

<div class="post-metadata">

**Author:** ![oxal](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/o/ba8739/32.png) [@oxal](https://forum.oxid-esales.com/u/oxal)\
**Post date:** [April 10, 2010, 2:01pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/16 "2010-04-10T14:01:11Z")

</div>

[QUOTE=highknee88;29241]Ja nur komm ich dann ja irgendwie nicht auf die OXSEO Url für die Artikel die gefunden werden…was ja schon recht hilfreich ist 😉 Außer ich bau die ganze seo encoder geschichte nach([/QUOTE]

Muß es die SEO-Url sein? Mit

[http://deinedomain.de/index.php?cl=details&anid=](http://deinedomain.de/index.php?cl=details&anid=)[hier die OXID ranhängen]

geht auch direkt auf das Produkt.

---

<div class="post-metadata">

**Author:** ![leofonic](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/leofonic/32/58_2.png) [@leofonic](https://forum.oxid-esales.com/u/leofonic)\
**Post date:** [April 11, 2010, 9:58pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/17 "2010-04-11T21:58:42Z")

</div>

[QUOTE=highknee88;29232]  
Wenn ich jetzt den link kommt auch genau der Inhalt.  
Aber bei meiner Live Search baut er eine komplette Seite quasi in dem Div auf also nicht nur  
Wodran könnte das liegen ?[/QUOTE]  
Das dürfte daran liegen dass per Ajax nicht derselbe Link aufgerufen wird. Im Fehlerfall lädt Oxid immer die Startseite.

---

<div class="post-metadata">

**Author:** ![highknee88](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/h/85e7bf/32.png) [@highknee88](https://forum.oxid-esales.com/u/highknee88)\
**Post date:** [April 12, 2010, 11:29am UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/18 "2010-04-12T11:29:51Z")

</div>

Kann es sein, dass man irgendwo einstellen muss, dass er “Nicht-SeoUrls” zulassen darf ?

---

<div class="post-metadata">

**Author:** ![system](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/system/32/4245_2.png) [@system](https://forum.oxid-esales.com/u/system)\
**Post date:** [July 13, 2026, 7:51pm UTC](https://forum.oxid-esales.com/t/ajax-live-search/42979/19 "2026-07-13T19:51:03Z")

</div>

Closed on July 13, 2026, 7:51pm UTC


