expertenaustausch > comp.lang.* > comp.lang.javascript

Jan Novak (09.03.2018, 14:03)
Hallo,

Ich bekomme folgendes snippet nicht zum laufen:

<script src="vendor/bootstrap-treeview/bootstrap-treeview.min.js"></script>

//(... und alle weiteren wie jquery, bootstrap)

<div id="tree"></div>
<script type="text/javascript" charset="utf-8">
function getTree() {
var testdata=
[{"text":"11 - test1"},{"text":"28 - zweiter"}]
;
return testdata;
}
function getDbTree() {
$.getJSON('fetch.php', function(data) {
console.dir( data );
var dataz=JSON.stringify(data);
console.log( dataz );
return (dataz);
});
}
$('#tree').treeview({data: getDbTree()});
</script>

Verwende ich "data: getTree()" wird mir der Baum sauber angezeigt.
Verwende ich aber "data: getDbTree()" dann nicht, obwohl die "fetch.php"
exakt das gleiche aus gibt.

Die fetch.php besteht nur aus :

echo '[{"text":"11 - test1"},{"text":"28 - zweiter"}]';

der Text [{"text":"11 - test1"},{"text":"28 - zweiter"}] wird mir sowohl
im Browser (bei Aufruf der fetch.php) als auch in der Browser Console
angezeigt -> console.log( dataz ) und console.dir( data ) (dann
natürlich in 2 Objekten).

Wo liegt denn da der Fehler?

Jan
Christoph M. Becker (09.03.2018, 14:39)
Am 09.03.2018 um 14:03 schrieb Jan Novak:

> Ich bekomme folgendes snippet nicht zum laufen:


Vielleicht hat es keine Beine? ;)

[..]
>     $('#tree').treeview({data: getDbTree()});
> </script>
> Wo liegt denn da der Fehler?


getTree() liefert ein Array zurück, aber getDbTree() eine Zeichenkette.
Jan Novak (09.03.2018, 14:45)
Am 09.03.2018 um 14:39 schrieb Christoph M. Becker:
> Am 09.03.2018 um 14:03 schrieb Jan Novak:
> Vielleicht hat es keine Beine? ;)
> getTree() liefert ein Array zurück, aber getDbTree() eine Zeichenkette.


woran erkenne ich das und wie kann ich das ändern?

Jan
Jan Novak (09.03.2018, 15:03)
Am 09.03.2018 um 14:45 schrieb Jan Novak:
> Am 09.03.2018 um 14:39 schrieb Christoph M. Becker:


Verwirrung komplett:

<script type="text/javascript" charset="utf-8">
function getTree() {
var testdata=
[{"text":"11 - test1"},{"text":"28 - zweiter"}]
;
console.log( testdata );
return testdata;
}

function getDbTree() {
$.getJSON('/ot/include/fetch.php', function(data) {

okdata=getTree();
console.log( okdata );
return ( okdata );
});
}

$('#tree').treeview({data: getDbTree()});

</script>

in der Konsole sehe ich für dieses Beispiel zwei gleiche Ausgaben:
Array [ Object, Object ]

Also ist doch kein Unterschied ?

Jan
Christoph M. Becker (09.03.2018, 15:44)
Am 09.03.2018 um 14:39 schrieb Christoph M. Becker:

> Am 09.03.2018 um 14:03 schrieb Jan Novak:
> getTree() liefert ein Array zurück, aber getDbTree() eine Zeichenkette.


Unfug! getDbTree() liefert ein jqXHR Objekt zurück. Was der success
callback zurückliefert, ist irrelevant.

Warum initialisierst du die Treeview nicht direkt im success callback,
also etwa:

$.getJSON('fetch.php', function(data) {
$('#tree').treeview({data: data});
});
Jan Novak (09.03.2018, 16:22)
Am 09.03.2018 um 15:44 schrieb Christoph M. Becker:
> Unfug! getDbTree() liefert ein jqXHR Objekt zurück. Was der success
> callback zurückliefert, ist irrelevant.
> Warum initialisierst du die Treeview nicht direkt im success callback,
> also etwa:
> $.getJSON('fetch.php', function(data) {
> $('#tree').treeview({data: data});
> });


So funktioniert es. Ich bin echt erstaunt.
Kannst du mir aber bitte erklären, warum es auf diese Wiese funktioniert
und auf die andere nicht?

Jan
Stefan Reuther (09.03.2018, 19:40)
Am 09.03.2018 um 16:22 schrieb Jan Novak:
> Am 09.03.2018 um 15:44 schrieb Christoph M. Becker:
> So funktioniert es. Ich bin echt erstaunt.
> Kannst du mir aber bitte erklären, warum es auf diese Wiese funktioniert
> und auf die andere nicht?


(a) Die Daten, die du willst, kommen im Parameter 'data' an. Also musst
du den Parameter 'data' auch irgendwie in '.treeview()' hineinfüllen.
Deine 'getDbTree' loggt den aber nur, konvertiert sie in einen String
'dataz' und liefert den zurück. Die Daten sind also hinterher weg.

(b) Ernsthaftes JavaScript arbeitet asynchron[*], d.h. die Funktion
'getJSON' kehrt sofort zurück, der Rückgabewert kann gar nicht die Daten
enthalten. Der Callback 'function(data)...' wird irgendwann später
aufgerufen, wenn dein "Hauptprogramm" lange beendet ist, und sein
Rückgabewert (der String) ist wiederum egal.
[*] man kann auch synchron Daten laden. Sollte man aber nicht.

Stefan
Jan Novak (12.03.2018, 10:37)
Am 09.03.2018 um 19:40 schrieb Stefan Reuther:
[..]
> aufgerufen, wenn dein "Hauptprogramm" lange beendet ist, und sein
> Rückgabewert (der String) ist wiederum egal.
>[*] man kann auch synchron Daten laden. Sollte man aber nicht.


Das erklärt einiges. Ich bin wohl noch zu sehr im "on error goto 1000"
Modus ;-)
Letztendlich macht es die Sache (für mich) aber nicht einfacher. Ich
habe das Buch "thinking in Java" gelesen (wenigstens teilweise) und
dachte mir noch ... was "in java denken"? Jetzt weiss ich, was der
Author damit meinte. Ich denke das gilt auch für Javascript.

Jan
Thomas 'PointedEars' Lahn (12.03.2018, 14:14)
Jan Novak wrote:

> [?] Ich habe das Buch "thinking in Java" gelesen (wenigstens teilweise)
> und dachte mir noch ... was "in java denken"? Jetzt weiss ich, was der
> Author damit meinte. Ich denke das gilt auch für Javascript.


JFTR:

1. Java != JavaScript
2. Es gibt kein ?Javascript?.
Jan Novak (13.03.2018, 07:44)
Am 12.03.2018 um 14:14 schrieb Thomas 'PointedEars' Lahn:
> Jan Novak wrote:
> JFTR:
> 1. Java != JavaScript
> 2. Es gibt kein ?Javascript?.


Wo schrieb ich denn, dass Java und Javascript das gleich ist?

Im allgemeinen Sprachgebrauch gibt es sehr wohl "Javascript".

Ich meinte das "thinking in" ... Man muss in der Spreache denken, wenn
man sie verstehen will (ja, das ist keine neue Erkentnis).

Jan
Thomas 'PointedEars' Lahn (13.03.2018, 19:46)
Jan Novak wrote:

> Am 12.03.2018 um 14:14 schrieb Thomas 'PointedEars' Lahn:
> Wo schrieb ich denn, dass Java und Javascript das gleich ist?


man JFTR

> Im allgemeinen Sprachgebrauch gibt es sehr wohl "Javascript".


Nur unter Wannabes. Siehe Signatur.
Jan Novak (14.03.2018, 08:00)
Am 13.03.2018 um 19:46 schrieb Thomas 'PointedEars' Lahn:
> Jan Novak wrote:
> man JFTR


"Just For The Record" oder "joint federal travel regulations" oder was?

>> Im allgemeinen Sprachgebrauch gibt es sehr wohl "Javascript".

> Nur unter Wannabes. Siehe Signatur.


Du warst bestimmt auch mal ein "wannebe" ;-)

Jan
Thomas 'PointedEars' Lahn (14.03.2018, 13:58)
Jan Novak wrote:

> Am 13.03.2018 um 19:46 schrieb Thomas 'PointedEars' Lahn:
> "Just For The Record" oder "joint federal travel regulations" oder was?


Ja.

>>> Im allgemeinen Sprachgebrauch gibt es sehr wohl "Javascript".

>> Nur unter Wannabes. Siehe Signatur.


Damit meinte ich den Verweis auf die ECMAScript Support Matrix.

> Du warst bestimmt auch mal ein "wannebe" ;-)


Nein, dieser Ansatz ist mir fremd. Ich strebe danach, erst zu lernen, zu
verstehen und zu tun, worüber ich spreche/schreibe. Du solltest das auch
(bezogen auf das was Du tust).
Jan Novak (14.03.2018, 15:50)
Am 14.03.2018 um 13:58 schrieb Thomas 'PointedEars' Lahn:

>>>>> 1. Java != JavaScript
>>>>> 2. Es gibt kein ?Javascript?.
>>>> Wo schrieb ich denn, dass Java und Javascript das gleich ist?
>>> man JFTR

>> "Just For The Record" oder "joint federal travel regulations" oder was?

> Ja.


Auf eine "oder" Frage kann man nicht mit "ja" oder "nein" antworten.
Oder wolltest du mit dem "ja" deinen Zuspruch für beide bekunden?

>> Du warst bestimmt auch mal ein "wannebe" ;-)

> Nein, dieser Ansatz ist mir fremd. Ich strebe danach, erst zu lernen, zu
> verstehen und zu tun, worüber ich spreche/schreibe. Du solltest das auch
> (bezogen auf das was Du tust).


Naja. In dem Moment, wo du dir sagst: Ich möchte [whatever] lernen, bist
du doch ein "wannebe". Irgendwann fängt jeder bei 0 (null) an ;-)

Jan

p.s. Ich denke, diese Diskussion gehört hier nicht hin - womit ich nicht
sagen will, dass ich sie nicht interessant fände :-)
Thomas 'PointedEars' Lahn (14.03.2018, 16:51)
Jan Novak wrote:

> Am 14.03.2018 um 13:58 schrieb Thomas 'PointedEars' Lahn:
> Auf eine "oder" Frage kann man nicht mit "ja" oder "nein" antworten.


Doch, kann man.

> Oder wolltest du mit dem "ja" deinen Zuspruch für beide bekunden?


Mu.

<http://tty1.net/smart-questions_de.html>

>>> Du warst bestimmt auch mal ein "wannebe" ;-)

>> Nein, dieser Ansatz ist mir fremd. Ich strebe danach, erst zu lernen, zu
>> verstehen und zu tun, worüber ich spreche/schreibe. Du solltest das auch
>> (bezogen auf das was Du tust).

> Naja. In dem Moment, wo du dir sagst: Ich möchte [whatever] lernen, bist
> du doch ein "wannebe". Irgendwann fängt jeder bei 0 (null) an ;-)


_Wannabe_ (?want-to-be? ? ?Möchtegern? [möchte gern als wissend erscheinen,
hat aber keine Ahnung]) != Newbie (?Neuling?)

HTH
Ähnliche Themen