function protokoll(){
$.post('prt.php',function(protokollarray){
$('div').html('<submit onclick="get(protokollarray)">hole Daten</submit>');
Es gibt kein submit-Element. Suchst du vielleicht <button>?
Natürlich kannst du hier im Event-Handler nicht auf protokollarray zugreifen. protokollarray ist eine lokale Variable der Callback-Funktion, der Event-Handler-Code wird aber im globalen Kontext ausgeführt. Da ist die Variable in dem Fall nicht verfügbar.
//alternative
$('div').html('<submit onclick="get('+protokollarray+')">hole Daten</submit>');
Das funktioniert, wenn sich nur einfache Werte im Array befinden und er sich somit ohne Verluste in einen String umwandeln lässt. Da du hier aber auf eine Eigenschaft »erstes« zugreifst, handelt es sich wahrscheinlich eher um ein Object, keinen klassischen Array:
function get(r) {
alert(r.erstes);
}
Also hab ich es mit einem global definierten Array versucht:
Es ist die schlechteste Lösung, einfach alle Variablen global zu machen.
var protokollarray = new Array();
function protokoll(){
$.post('prt.php',function(){
$('div').html('<submit onclick="get(protokollarray)">hole Daten</submit>');
...
});function get() {
alert(protokollarray.erstes);
}
}
>
> klappte leider auch nicht.
Natürlich funktioniert das nicht. An keiner Stelle wird der globalen Variable ein Wet zugewiesen. Die Ajax-Callback-Funktion nimmt die Serverantwort gar nicht mehr als Parameter entgegen. Du müsstest schon schreiben:
$.post('...', function (response) {
protokollarray = response; // speichere Antwort global
$('div').html('<button onclick="get()">hole</button>'):
});
Eine Übergabe von protokollarray an get ist in dem Fall unnötig, es ist schließlich eine globale Variable.
Und dann in get:
function get() {
alert(protokollarray.erstes);
}
Eine saubere Lösung sähe aber anders aus. Es ergibt hier durchaus Sinn, mit verschachtelten Funktionen zu arbeiten, die gegenseitig auf ihre Variablen zugreifen können ([Closures](http://molily.de/js/organisation-verfuegbarkeit.html#closures)).
~~~javascript
function protokoll () {
// Funktionsvariable, auf die verschachtelte Funktionen zugreifen können
var response;
$.post('prt.php', callback, 'json');
function callback (r) {
// Weise Variable einen Wert zu
response = r;
// Element mit DOM erzeugen und Event-Handler registrieren
var button = $('<button>hole Daten</button>').click(getData);
// Button einhängen
$('div').empty().append(button);
}
function getData () {
alert(response.erstes);
}
}
Mathias