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代码,具体取决于检索到的值。我必须说,虽然我不知道这是否被认为是好的,或者这种设置/方法(也)没有完成。