2014-06-13 31 views
0

我想知道是否有一种方法只在文档准备好时才加载脚本的一部分,我的意思是当所有的css,js和图像都被下载时运行php脚本有点沉重。在jquery文档上准备运行php脚本

在PHP我知道,可以使用一个如果其他但在jQuery上?

可以是:?

 <script> 
     jQuery(document).ready(function($) { 
     </script> 
     <?php 
     $script = $this->getAllItems(); 
     ?> 
     <script> 
     }); 
      </script> 



    <div class="page"> 
      <?php echo $this->getChildHtml('header'); ?> 
      <div class="main-container col2-left-layout"> 
       <div class="main container_16 clearfix"> 
        <div class="col-main grid_16"> 
         <?php echo $this->getChildHtml('top_callout'); ?> 
        </div> 
        <div class="col-main grid_16"> 
         <?php echo $this->getChildHtml('breadcrumbs'); ?> 
        </div> 
        <div class="col-main grid_12"> 
         <?php echo $this->getChildHtml('global_messages'); ?> 


on document ready call content 
         <?php echo $this->getChildHtml('content'); ?> 



        </div> 
        <div class="col-left sidebar grid_4"><?php echo $this->getChildHtml('left'); ?></div> 
       </div> 
      </div> 
      <?php echo $this->getChildHtml('footer'); ?> 
      <?php echo $this->getChildHtml('before_body_end'); ?> 
     </div> 

任何帮助表示赞赏!

回答

4

我觉得有语言混淆。 PHP是服务器端语言。当原始数据源触及您的浏览器时,它已经运行并完成。 JavaScript另一方面是客户端解析并呈现在浏览器中。

如果您需要在加载页面后运行PHP脚本,则需要使用AJAX。你必须做的是这样的情况如下:

$(window).load(function() { 
    $.ajax({ 
     url: "some-php-script.php", 
     data: { ... } // data to send to php if applicable, 
     ... // other options that may be needed 
     success: function (res) { 
      ... // handle successful return of data (if applicable) 
     } 
     error: function (res) { 
      ... // handle error if appropriate 
     } 
    }); 
}); 

参考:.ajax()

编辑:

通过user3553931

建议既然你想等待所有样式表,脚本和图像加载,我更新了我的答案以使用load事件而不是DOMContentLoaded$(document).ready后面的事件)。

根据下面的MDN文档,看起来load事件会比DOMContentLoaded事件更符合您的问题要求。

参考:DOMContentLoaded

摘录:

当文件被完全加载和分析的DOMContentLoaded事件被触发,而无需等待样式表,图片和子框架完成加载(加载事件可以用来检测满载页面)。

+0

$(window)。加载(fn)将是理想的,因为他的目标是在图像加载后发生事件,你不觉得吗? – PeterKA

+0

@ user3558931良好的通话我更新了我的回答,并引用了您的更新信用。谢谢一堆。 – War10ck

0

你必须通过ajax来做到这一点。到你的document.ready运行时,PHP早已不复存在。 PHP在服务器端执行,JS在客户端执行。尝试做这样的事情:

<script> 
(function($) { 
    $.ajax({ 
     type: "POST", 
     url: 'index.php', 
     data: { }, //send data if needed 
     success:function(){ 
      alert("Success!"); 
     } 
    }); 
</script> 

其中url是您的PHP脚本的路径。您甚至可以在该PHP文件中返回某些内容,并在ajax调用的成功处理程序中对其执行某些操作。

有关AJAX的更多信息,请参阅此处:.ajax()

+0

这是我需要调用$ this-> getChildHtml('content')的函数;谢谢 – Dario

+0

所以在你的php文件中调用该函数并将结果返回给javascript。从那里你可以随心所欲地做任何事情。 – hanleyhansen

+0

据我所知,如果我打电话给ajax文件需要包含洞函数,这是来自magento模板的htmlchild的一部分,所以在那部分我需要插入($ this-> getChildHtml('content ');)在文档准备就绪,但问题是,如果我用这个创建一个PHP文件,内容不加载! – Dario