# [Ajax] Parameter an auszuführende routine übergeben



## Biergamasda (15. März 2006)

Hi Leutz

Also, zu meiner Frage...


```
//Inhalt in der macheRequest Funktion
        http_request.onreadystatechange = ausgabeInhalt;
        http_request.open('GET', url, true);
        http_request.send(null);
    }

    function ausgabeInhalt() 
    {
        if (http_request.readyState == 4) //Serverantwort vollständig empfangen
        {
            if (http_request.status == 200) //Status 200 = OK
            {
                var inhalt = http_request.responseText;
                document.getElementById("Inhalt").innerHTML = inhalt;
            }
            else
                alert('Bei dem Request ist ein Problem aufgetreten.');
        }
    }
```

Wie Ihr sehen könnt, soll das script den Inhalt von dem Element mit der id "Inhalt" ändern. Das Problem bei der ganzen sache ist jedoch, dass ich diese Routine zum request erstellen gerne weiterverwenden möchte um in ein anderes Element ebenfalls einen Inhalt zu bekommen.

Bei dieser Idee kam ich auf drei mögliche Lösungsansätze.

1.
ich übergebe an "macheRequest" meine Request Funktion einen Parameter, aufgrunddessen ich durch eine bedingung, if oder switch, dem Attribut onreadystatechange den richtigen Methodenaufruf zukommen lasse, sprich je nach id eine andere routine ausführen lasse.

2.
beim setzen des Attributs onreadystatechange einen Parameter mitübergeben, jedoch habe ich nirgends etwas gefunden was funktioniert hätte, bzw auch keinen Hinweis darauf, dass es möglich/unmöglich ist, mit dieser Methoder der "Programmierung" Parameter zu übergeben

3.
Die Aufzurufende Routine  per Parameter in die macheRequest Funktion übergeben, einer Variable zuweisen und anschließend diese Variable onreadystatechange zuzuweisen (funktionierte so wie ich's machte jedoch nicht)


Vielen Dank schon im Voraus für die hoffentlich zahlreichen Antworten

lg Masda

PS:
hoffe das ist das richtige Board, war mir nicht sicher ob ichs zu js oder xml geben sollte, aber denke, dass es hier besser aufgehoben ist


----------



## Quaese (16. März 2006)

Hi,

ich würde es mit deiner zweiten Lösungsmöglichkeit versuchen - der Funktion *ausgabeInhalt*
einen Parameter zu übergeben. Dazu wird bereits der Routine *macheRequest* die ID übergeben
und entsprechend weitergereicht.

```
function macheRequest(url, strID){
  // ... 

  http_request.onreadystatechange = new Function('fx', 'ausgabeInhalt("'+strID+'")');
  http_request.open('GET', url, true);
  http_request.send(null);
}

function ausgabeInhalt(strID) 
{
  if (http_request.readyState == 4) //Serverantwort vollständig empfangen
  {
    if (http_request.status == 200) //Status 200 = OK
    {
      var inhalt = http_request.responseText;
      document.getElementById(strID).innerHTML = inhalt;
    }
    else
      alert('Bei dem Request ist ein Problem aufgetreten.');
  }
}
```

Eine weitere Möglichkeit - definiere eine globale Variable, der du in *macheRequest* die
gewünschte ID zuweist. Auf diesen Wert kannst du von der zweiten Routine aus zugreifen.

Vielleicht hilft dir das weiter.

Ciao
Quaese


----------



## Biergamasda (16. März 2006)

Perfekt, funtioniert so wie ich's mir vorgestellt hatte 
Nur, versteh nicht so ganz wie das abläuft 
mit 

```
new Function("fx",'ausgabeInhalt("'+strID+'")');
```
wird doch ein Funktionspointer erstellt, der auf eine Funktion mit dem Parameter "fx" und Inhalt "ausgabeInhalt" zeigt. Oder ist es hier so, dass das hier einen Pointer auf die bereits definierte Funktion ausgabeInhalt erstellt? (währ nett wenn mir da mal jemand bissl beim durchblicken helfen könnte 


Desweiteren hat sich ein neues Problem aufgetan 
Also, Ich lese mit einem PHP Script, das ich aufrufe, eine Datenbank aus, die Ergebnisse stehen demnach in einem/mehreren Arrays. Diese Arrays würde ich gerne In mein Ajax Script bekommen, um dann damit weiterarbeiten zu können.

Meine Idee währe, die Inhalte der Variablen im php Script auszugeben, und anschließend in der Routine in ein JS Array zu zerlegen. Diese Methode erscheint mir aber ziemlich Umständlich, deshalb würd ich gerne fragen, obs möglich ist, dies anders zu machen.

Wenn dies zu Umständlich ist, generiere ich den einzufügenden Code direkt im php Script und füge ihn dann direkt ein, nur würde ich es bevorzugterweise anders lösen, da ich mir dann ersparen könnte, einige Teile der "Eingebundenen" Seite ständig neuzuladen (zur Info, es geht um eine Filmvorschau die in Einer Tabelle liegt und man Tage vor bzw zurückblättern kann)

Danke nochmal und
lg Masda

//Wie man vl sieht bin ich mit Ajax noch nicht wirklich bewandert, bin jedoch fleißig am lernen


----------

