AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?"-Test
Thema durchsuchen
Ansicht
Themen-Optionen

[D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?"-Test

Ein Thema von DelphiProgrammierer · begonnen am 30. Apr 2007 · letzter Beitrag vom 30. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
DelphiProgrammierer

Registriert seit: 11. Apr 2007
67 Beiträge
 
Delphi 2007 Professional
 
#1

[D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?"

  Alt 30. Apr 2007, 01:52
Seit gestern Abend teste ich die Delphi for PHP Trial und war besonders gespannt auf das Thema Ajax, d.h. Verzicht auf einen Redraw der kompletten Seite. Zum Glück gibt es ein Sample Project BasicAjax.phprj. Dies tut auch soweit.
Nur: Wie kann ich testen, ob wirklich nicht ge-re-drawed wird (auch wenn die Logik des Codes tatsächlich besagt, dass zumindest kein neuer Request an den Server geschickt wird).
Ich dachte mir folgendes: Ich habe einfach einen Label2 angelegt, der im OnShow-Ereignis des Formulars einen neuen (zufälligen) Wert zugewiesen bekommt.
Code:
               function IndexBeforeShow($sender, $params)
               {
                 $this->Label2->Caption=rand(1,1000);
                }
Tja, das Lustige ist halt jetzt, dass beim Drücken des Buttons das "Hello from Ajax" im farbigen Feld erscheint, aber eben auch Label2 seine Caption ändert. Ich habe mal Button1 und Label1 auf ein Panel1 gelegt und Label2 auf ein Panel2. Das Verhalten ist identisch.
Hat mir jemand eine Erklärung dafür? Wo liegt mein Denkfehler? Ich muss dazu sagen, dass das jetzt meine ersten Versuche überhaupt mit Ajax sind.

[edit=Phoenix]Delphi-Tags in Code-Tags geändert. Obwohl es zwar "Delphi" für PHP ist, kann unser Syntaxhighlighter DAS dann doch nicht Mfg, Phoenix[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#2

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a

  Alt 30. Apr 2007, 07:55
Letzlich bedeutet AJAX folgendes:
  • Das JavaScript erzeugt ein XML - HTTP - Request Objekt
  • Dieses Objekt (im Browser) sendet einen speziellen http-Request an den Webserver
  • Das PHP-Script auf dem Server (in unserem Fall die VCL für PHP) erzeugt eine XML-Struktur als Antwort auf die Anfrage und schickt diese zum Browser
  • Das Javascript verwendet diese Antwort um die Inhalte auf der Webseite auszutauschen

Ganz kurz gesagt, werden durch AJAX nicht immer die ganze Seite, sondern nur die Änderungen an einer Webseite vom Server geholt.

Ich habe mich mit der VCL für PHP noch nicht beschäftigt, aber es kann sehr gut sein, dass das Script einfach in jedem Callback alle Controls aktualisiert, wenn sich dort etwas ändert.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
DelphiProgrammierer

Registriert seit: 11. Apr 2007
67 Beiträge
 
Delphi 2007 Professional
 
#3

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a

  Alt 30. Apr 2007, 14:44
Zitat von Phoenix:
Ich habe mich mit der VCL für PHP noch nicht beschäftigt, aber es kann sehr gut sein, dass das Script einfach in jedem Callback alle Controls aktualisiert, wenn sich dort etwas ändert.
Ich sollte erwähnen, dass es keine Rolle spielt, ob ich den Label2 in OnShow oder BeforeShow verändere.
Vielleicht bin ich nur irritiert, dass diese Ereignisse überhaupt ausgelöst werden. Erst das OnShow bzw. BeforeShow-Ereignis führen ja zu einer Veränderung von Label2.

Worum es mir aber eigentlich geht: Wie könnte ein Beispiel (Test) aussehen, das beweist, dass bei einer Änderung unbeteiligte Controls auch tatsächlich nicht neu dargestellt werden?
Mir scheint es, es findet eben doch ein kompletter Redraw der Seite statt - nur eben kein Reload?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#4

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a

  Alt 30. Apr 2007, 15:55
In deinem Page-Lifecycle wird doch das Label geändert. Also ist es beteiligt, also wird dessen Inhalt neu Übertragen.

Nochmal: Das PHP-Script wird in jedem Fall komplett durchlaufen. Es werden jedoch lediglich die Änderungen an den Controls an den Client übertragen und dort angewendet.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
DelphiProgrammierer

Registriert seit: 11. Apr 2007
67 Beiträge
 
Delphi 2007 Professional
 
#5

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a

  Alt 30. Apr 2007, 16:16
Ist dann so ein "Beweis", dass kein Redraw stattfindet, gar nicht möglich, weil ich mit dem Experiment das Control verändere und damit den Redraw erzwinge?

OK, ich glaube, ich sehe ein, dass ich mich um andere Fragen innerhalb der D4PHP Evaluation kümmern sollte.
Z.B. vermisse ich ein DrawGrid oder StringGrid.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#6

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a

  Alt 30. Apr 2007, 16:33
Bitte spreche im Zusammenhang mit HTML / CSS nicht von Redraw. Da werden Elemente maximal ausgetauscht, aber nie, gar nie nicht, neu gezeichnet. Es gibt entweder einen kompletten Page Reload oder einen Callback / AJAX-Call.

Ich würde aber jede Wette eingehen, dass es auf dem Formular eine Eigenschaft gibt die Dir sagt, ob Du im Reload oder im Callback bist.

Wegen Controls: Ich denke nicht, dass eine Art DrawGrid im Bereich HTML / CSS Sinn machen würde.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a

  Alt 30. Apr 2007, 16:37
Zitat von DelphiProgrammierer:
Ist dann so ein "Beweis", dass kein Redraw stattfindet, gar nicht möglich, weil ich mit dem Experiment das Control verändere und damit den Redraw erzwinge?
Es geht darum, dass kein komplettes Neuladen der Seite nötig wird.
Natürlich kann sie neu gezeichnet werden, das stört ja auch nicht so krass wie ein Neuladen. (Fokusverlust, inhalten von Controls, Flackern, und vor allem WARTEN)

Bin aber glücklicherweise kein Webfritze, löcher' also lieber Phoenix.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
DelphiProgrammierer

Registriert seit: 11. Apr 2007
67 Beiträge
 
Delphi 2007 Professional
 
#8

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a

  Alt 30. Apr 2007, 16:44
Zitat von Elvis:
Natürlich kann sie neu gezeichnet werden, das stört ja auch nicht so krass wie ein Neuladen. (Fokusverlust, inhalten von Controls, Flackern, und vor allem WARTEN)

Bin aber glücklicherweise kein Webfritze, löcher' also lieber Phoenix.
Dass ein Neuladen viel schlimmer wäre als ein Neu-Zeichnen ist völlig klar, deswegen ja Ajax. Mir geht es um das eventuelle Flackern. Wird man nachher bei größeren Projekten bequem arbeiten können oder flackert es jeweils, weil mit jedem Button-Click etc. die komplette Seite neu dargestellt wird.

Eigentlich geht es mir darum, inwiefern ich eine Delphi-Rich-Client-EXE durch eine D4PHP-Browser-Lösung (zumindest partiell) ersetzen kann oder welche Nachteile unvermeidlich sind.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?

  Alt 30. Apr 2007, 16:51
Hallo,

der Sinn von Ajax ist das Nachladen von dynamischen Inhalten, ohne die statischen Inhalte auch neuzuladen.
Da solltest du der VCL for PHP einfach vertrauen, die macht das schon richtig

EDIT: Vorausgesetzt, du baust das ganze richtig auf. Ein PHP-Script wird auf jeden Fall komplett ausgeführt. Nur wenn deine "index.php" die statischen Inhalte + ein JavaScript an den Webbrowser schickt, und dieses JavaScript dann die dynamischen Inhalte von einer "content.php?module=xy&id=42" nachlädt, haut das hin.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
DelphiProgrammierer

Registriert seit: 11. Apr 2007
67 Beiträge
 
Delphi 2007 Professional
 
#10

Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?

  Alt 30. Apr 2007, 17:01
Zitat von DGL-luke:
Da solltest du der VCL for PHP einfach vertrauen, die macht das schon richtig
Nachdem ich gehört hatte (OT), dass bei IntraWeb der Zurück-Button nicht benutzt werden darf, was ich als KO-Kriterium werte, ist zwar Vertrauen gut, aber ich suche auch hier bei D4PHP nach eventuellen KO-Kriterien. Wenn irgendwelche elementaren Dinge nicht userfreundlich täten, dann könnte ich mit meinen Tests sofort aufhören.
Aber ich nehme Dich beim Wort, stelle die in diesem Thread diskutierten Experimente ein und vertraue, was das Thema Reload und Flackern anbelangt, den Fähigen der PHP-VCL von D4PHP.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz