2009-06-04 7 views
0

Ist diese schlechte Praxis, PHP-Anweisungen wie "wenn" innerhalb einer JQuery-Funktion zu verwenden?PHP-Anweisungen in JQuery

sollte ich wirklich nur mehr Funktionen schreiben anstatt nur ein paar mit php zu begrenzen? es scheint gut zu funktionieren, aber fragte sich, ob das ein großer faux pax ist?

Beispiel:

dies ist ein Code-Schnipsel, im Grunde, wenn der PHP-Variable $ url ‚Projekte‘ gleich ist, dann wird der Code mit zusätzlichen Zeilen zurückkommen, sonst wird diese von anderen Seiten ausgeblendet werden. Macht das Sinn?

timer = setTimeout(function() { 
       $('li#contact').removeClass('cur'); 
       $('li#$url').addClass('cur'); 
       "; if($url=='projects') { echo" 
       $('ul.projects').fadeIn('slow'); 
       $('ul.image_display').css('display', 'block');"; } 
       echo" 
        }, 8625); 
+1

Können Sie ein Beispiel geben? Da PHP auf dem Server läuft und jQuery im Browser läuft, was meinst du mit "php in jquery verwenden"? – Piskvor

+0

Habe mit einem Beispiel oben – DanC

Antwort

1

Nicht schlecht Praxis manchmal Wert einer PHP-Variablen ändern, was Sie den Code tun möchten.

Sie müssen jedoch Ihren PHP-Code öffnen und schließen.

+0

so im Grunde kann die PHP-Caching aber nicht die Code-Performance und so nicht wirklich schlecht üben? bedeutet, ich muss nicht alles mindestens neu schreiben !! :) – DanC

+0

Grundsätzlich wollen Sie auch nicht etwas, das sich ändert, zwischenspeichern. Ich nehme an, Sie könnten theoretisch ein PHP machen, wenn Sie sonst beide Versionen des Javascript in separaten .js-Dateien haben - aber die Wahrheit ist für eine Website, die wahrscheinlich nicht so riesig ist und ein Code-Snippet, das so klein ist, würde ich nicht sagen t. –

0

Ich denke nicht, dass es eine schlechte Praxis ist. Ich benutze ASP.NET-Literale, um dynamische jQuery basierend auf Daten zu schreiben, die aus der Datenbank zurückkommen. Ich mache es nicht oft, aber manchmal ist es nötig.

1

es hängt davon ab. Wenn Sie nur einige Benutzerdaten schreiben, die von JavaScript konsumiert werden (z. B. eine Benutzer-ID oder einen Namen), dann gibt es keine. Aber wenn Sie PHP viel für Kontrollstrukturen verwenden, gibt es wahrscheinlich einen besseren Weg, dies zu tun.

Einer der großen Nachteile Ihres Ansatzes (abgesehen von Code, der ein wenig hässlich ist) würde verhindern, dass die js gut zwischengespeichert werden. Da die js dynamisch erstellt wird und nicht in einer separaten, komprimierten js-Datei gespeichert ist, verlieren Sie die Fähigkeit, sie zwischenzuspeichern und Ihre Bandbreite zu beeinträchtigen.

1

sollten Sie nicht Ihren PHP-Code zwischen PHP-Tags dann? Andernfalls wird es nur im Quellcode angezeigt, anstatt auf dem Server verarbeitet zu werden.

timer = setTimeout(function() { 
        $('li#contact').removeClass('cur'); 
        $('li#$url').addClass('cur'); 
        "; <?php if($url=='projects') { echo" 
        $('ul.projects').fadeIn('slow'); 
        $('ul.image_display').css('display', 'block');"; } 
        echo" 
          } ?>, 8625); 

off topic: einige bessere Formatierung wäre auch nett :)

+0

aktualisiert das war nur ein Ausschnitt, die Tags sind woanders! – DanC

3

Dies ist meiner Meinung nach eine schlechte Praxis in Bezug auf Code Lesbarkeit und Wartbarkeit. Nur weil es zwei ineinander eingebettete Sprachen sind, was bedeutet, dass Sie es nicht verstehen können, ohne zwei Sprachen zu analysieren, und für viele Leute einen mentalen "Seitenfehler" verursachen, wenn der Kontext zwischen JS-Parser und PHP-Parser wechselt.

Es ist einfach genug, den Javascript-Zweig basierend darauf, welche Seitenelemente vorhanden sind, zu haben, und dies ist meiner Meinung nach eine bevorzugte Lösung. Es ist besser als bedingt bestimmte Javascript (obwohl ich denke, die Bereitstellung von verschiedenen Javascript kann sinnvoll, wenn Sie eine überwältigend große Menge von js) und es ist auch besser als Verzweigung basierend auf URL ... Was passiert, wenn Sie gehen und dies umgestalten?

Wenn Sie wirklich verzweigen müssen, die Sie auf PHP-Basis liefern JS, würde ich wollen, dass sie zumindest in einzelnen Zeilen sehen ... so etwas wie:

<?php if($stmt): ?> 
$(javascript).code.goes.here 
<?php else: ?> 
$(alernative.javascript).code.goes.here 
<?php endif; ?> 

wie wäre schöner, als wenn zu Lesen und verstehen Sie zwei Sprachen in einer einzigen Zeile/Anweisung.

1

Ich versuche, den gesamten Code so weit wie möglich getrennt zu halten (HTML/CSS/PHP/JS), weil ich große Teile des JS-Codes in meinem HTML oder PHP nicht mag. Was ich normalerweise mit Variablen mache, ist, sie einfach irgendwo im HTML zu platzieren, z.B. <div id="url">value</div> und dann mit jQuery abrufen.Abhängig von den Variablen, habe ich manchmal ein paar dieser divs irgendwo auf der Seite mit display:none versteckt.

Auf diese Weise kann ich immer noch den gleichen JS-Code für mehrere Anwendungen verwenden, abhängig von den abgerufenen Werten. Ich muss allerdings sagen, dass ich keine Ahnung habe, ob das in Ordnung ist, oder dass diese Einrichtung/Methode (auch) nicht durchgeführt wird.