我在html文件中动态重新加载区域时遇到问题。我使用基于Ajax的方法。我成功地更新了我感兴趣的区域(HTMLdiv标记),但每次更新时,都会下载相同的JavaScript并与替换的HTML代码一起进行处理,这会消耗时间。我希望浏览器在AJAX更新时重用上次下载的JavaScript文件,而不是一次又一次地获取相同的内容,这会导致过多的开销。我的意思是什么?假设我有一个Button Widget
,它附加了widget.js
JavaScript。这个JavaScript将负责按钮点击时触发的事件。每次点击此按钮,事件都会"拍摄"AJAX请求,HTML页面上的特定区域会随着widget.js
的下载而更新(如有必要)。我希望widget.js
只是第一次下载,但目前它在每次AJAX请求时都会被下载。我注意到,每次请求提到的JavaScript文件时,都会附加一个随机值的查询参数_
。
widget.js?_=1374504824837
如何禁用此随机参数?
myindex.php
<p>
<div id='widget-container'>
<?php
$this->renderPartial('widget');
?>
</div>
</p>
我的控制器
public function actionWidget()
{
$this->renderPartial('widget',array(),false,true);
}
mywidget.php
<?php
$url = 'widget';
$update = '#widget-container';
$this->widget('ext.bootstrap.widgets.TbButton',
array('label' => 'Widget',
'size' => 'medium',
'buttonType' => 'ajaxButton',
'url' => $url,
'ajaxOptions' => array('type' => 'POST',
'update' => $update,
'cache' => false),
'htmlOptions' => array('id' => 'widget'.uniqid())
)
);
?>
有一个扩展NLCClientScript,用于在使用ajax更新视图时防止javascript文件的重复链接,取代Yii原来的ClientScript类。
略有不同的方法是将renderPartial的processOutput设置为false,但在这种情况下,它根本不会嵌入任何js
$this->renderPartial('widget', array(), false, false);