2009-06-04 35 views
0

這是不好的做法,使用PHP語句,如「if」在jquery函數內?php語句在jquery中

我應該真的只是寫入加載更多的功能,而不是限制使用PHP的幾個?它似乎工作正常,但想知道這是否是一個主要的假人?

例如:

這是一個代碼段,基本上如果PHP變量$網址等於「項目」,那麼代碼將回來與多餘的線條,否則,這些將從其他頁面被隱藏。這有意義嗎?

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

你能提供一個例子嗎?由於PHP在服務器上運行並且jQuery在瀏覽器中運行,因此,「在jQuery中使用php」是什麼意思? – Piskvor 2009-06-04 14:22:38

+0

更新了上面的示例 – DanC 2009-06-04 14:29:59

回答

1

不壞的做法,因爲有時候一個PHP變量的值將改變你想要的代碼做什麼。你將不得不使用打開和關閉你的PHP代碼。

0

我不認爲這是不好的做法。我使用ASP.NET文字來基於從數據庫返回的數據寫出動態jQuery。我做的不多,但有時候需要它。

1

它取決於。如果您只是寫出一些用於JavaScript的用戶數據(例如用戶ID或名稱),則不會。但是如果你在控制結構上使用PHP很多,可能有更好的方法來實現它。

你的方法的一個大缺點(除了有點難看的代碼之外)會阻止js被很好地緩存。通過讓js動態創建而不是在單獨的壓縮js文件中,您無法緩存它並損害您的帶寬。

1

不應該把php代碼放在php標籤之間嗎?否則,它只會顯示在源代碼中,而不是在服務器上處理。

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); 

題外話:一些更好的格式將是很好過:)

+0

這只是一個片段,標籤是其他地方! – DanC 2009-06-04 14:36:50

3

在我看來,這在代碼可讀性和可維護性方面是不好的做法。如果僅僅因爲它嵌入了兩種語言,這意味着如果不解析兩種語言,就無法理解它,對於許多人來說,在解析JS和解析PHP之間的上下文切換時,會導致精神上的「頁面錯誤」。

根據頁面元素的存在很容易得到javascript分支,在我看來這是一個首選的解決方案。它比有條件地提供某些javascript更好(雖然我認爲當你擁有絕大多數的js時,提供不同的javascript可能會有意義),它也比基於URL的分支更好......當你去重構它時會發生什麼?

如果你真的必須分支,JS您提供基於PHP,我希望看到他們至少在不同的行...是這樣的:

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

因爲這是不是必須更好在單行/語句中閱讀和理解兩種語言。

1

我儘量保持所有代碼的分離(HTML/CSS/PHP/JS),因爲我不喜歡在我的HTML或PHP中使用大量的JS代碼。我通常對變量所做的事情就是將它們放在HTML中的某個地方,例如<div id="url">value</div>,然後使用jQuery檢索它。根據沒有變量,我有時使用display:none將這些div的一些隱藏在頁面上。

這樣我仍然可以爲多個應用程序使用相同的JS代碼,具體取決於檢索到的值。我必須說,雖然我不知道這是否被認爲是好的,或者這種設置/方法(也)沒有完成。