• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

JS Array von PHP

StoRmtec

New member
Hallo
Ich habe eine Frage und zwar lasse ich mir von einem PHP Datenauslesen und übergebe es dann in ein JS Array. Das funktioniert soweit sogut. Nur wenn ich das ganze dann einen JS Variable weiter geben möchte dann passiert nichts mehr. Kann mir da bitte wer helfen?
Danke
php sieht so aus - $phpentrie = "new TimeEntry(1, 200, diagram.diagramTypes.spur" . $row['Spur']. ", '" .$row['ElementId']."')";

js -
<script type="text/JavaScript">
var data = <?php echo json_encode($phpentrie); ?>;
console.log(data);
var element1 = "[" + te + "]";
console.log(element1); ---- Im Log wird der Wert ausgeben.
var entries = element1; -- hier wird er nicht mehr weiter verarbeitet.
wenn ich aber var entries = [new TimeEntry(1, 200, diagram.diagramTypes.spur3, 'AU1600011-E1-A 1'); eingebe was er mir in der Console ausgibt dann funktioniert es.

An was kann das liegen?
Danke
 
So wie ich das sehe, ist $phpentrie ein String mit JS-Code. Wenn das so ist, musst du das json_ecnode() weglassen und direkt echo $phpentrie; machen.
 
Danke
Aber wenn ich das eingebe macht er auch nichts und bei der Ausgabe schreibt er dann auch das richtige hin wie er es ausgeben sollte.
Wenn ich ein document.write mit der ausgabe mache dann bekomme ich [[object Object]]
Danke
 
macht er auch nichts
Was soll er denn machen?
Wenn ich ein document.write mit der ausgabe mache dann bekomme ich [[object Object]]
Ja, das solltest du auch bekommen... was hättest du denn erwartet? Wenn du sehen willst, das ein Objekt wirklich ist, solltest du console.log() verwenden.

Zu document.write:
http://www.w3.org/html/wg/drafts/html/CR/webappapis.html#dynamic-markup-insertion schrieb:
This method has very idiosyncratic behavior. In some cases, this method can affect the state of the HTML parser while the parser is running, resulting in a DOM that does not correspond to the source of the document (e.g. if the string written is the string "<plaintext>" or "<!--"). In other cases, the call can clear the current page first, as if document.open( ) had been called. In yet more cases, the method is simply ignored, or throws an exception. To make matters worse, the exact behavior of this method can in some cases be dependent on network latency, which can lead to failures that are very hard to debug. For all these reasons, use of this method is strongly discouraged.
 
es wird einfach die Ausgabe nicht bei var entries hergenommen.
var entries = dieser Wert soll von der $phpentrie hier eingesetzt werden. [new TimeEntry(1, 200, diagram.diagramTypes.spur3, 'AU1600011-E1-A 1');

Wenn ich entries in der Console.log ausgeben lasse bekomme ich es ja auch angezeigt.
Was ist da noch falsch??
Danke
 
es wird einfach die Ausgabe nicht bei var entries hergenommen.
ähh was?

var entries = dieser Wert soll von der $phpentrie hier eingesetzt werden. [new TimeEntry(1, 200, diagram.diagramTypes.spur3, 'AU1600011-E1-A 1');
als string "new TimeEntry(1, 200, diagram.diagramTypes.spur3, 'AU1600011-E1-A 1');" oder als objektinstanz von TimeEntry?

Wenn ich entries in der Console.log ausgeben lasse bekomme ich es ja auch angezeigt.
in der konsole sollte immer was angezeigt werden, entweder der string oder das objekt. dann ist die js-variable auch gesetzt (entweder mit dem string oder mit dem objekt) und du kannst mit dieser arbeiten.

Was ist da noch falsch??
keine ahnung, was willst du denn machen?
 
Also ich bekomme meine Daten von meiner PHP Abfrage zB 25 Einträge die sehen so aus
new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 10'),new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 3'),new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 2')
Dann habe ich eine js function die var entries = []; haben möchte.
also habe ich mal fix in die var entries = [new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 10'),new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 3'),new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 2')]; geschrieben und siehe da er erstellt mir meine Einträge im Canvas.
Jetzt würde ich aber gerade mit der Variable was ich von der PHP bekomme arbeiten dabei habe ich mir gedacht ich gehe so vor.
var test = <?php echo json_encode($phpentrie); ?>;
var entries = test;
diagram.drawTimeEntries(entries);
Dann bekomme ich aber keine Einträge mehr nur wenn ich es fix codiert eintrage dann funktioniert es mit der echo ausgabe auf der Seite dort kopiere ich alles und füge das ein.
Danke
 
Jetzt würde ich aber gerade mit der Variable was ich von der PHP bekomme arbeiten dabei habe ich mir gedacht ich gehe so vor.
var test = <?php echo json_encode($phpentrie); ?>;
var entries = test;
diagram.drawTimeEntries(entries);
1.)wenn du in php mit json_encode ein php-string-array codierst, kommt auf js-seite auch ein string-array raus
2.) wenn du einen json-string selbst zusammenbastelst und in js einer variablen zuweist, ist es immer noch ein json-string, den musst du parsen
3.) wermutlich kommst du am besten, du generierst auf php-seite das js und bindest es mit <script src="xxx.php"></script> ein
 
danke wie würde das mit dem Punkt 3. gehen habe das leider noch nie gemacht.
Ist mein erstes JS Testprojekt. Danke
 
indem du in php den string
Code:
"var entries = [
  new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 10'),
  new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 3'),
  new TimeEntry(1, 200, diagram.diagramTypes.spur4, 'AU1600011-E1-A 2')
];"
erzeugst, mit echo ausgibst das script bindest du entweder vor dem anderen ein welches diagram.drawTimeEntries(entries); enthält oder schreibst das gleich mit in den php-string
 
Dann bekomme ich aber keine Einträge mehr nur wenn ich es fix codiert eintrage dann funktioniert es mit der echo ausgabe auf der Seite dort kopiere ich alles und füge das ein.
Zeige doch mal das HTML, das auch beim Browser ankommt. Dann können wir sehen, das da anders ist, als wenn du die fix einträgst.
 
Zurück
Oben