【问题标题】:Yii: Javascript & CSS not loading after Ajax callsYii:Ajax 调用后未加载 Javascript 和 CSS
【发布时间】:2014-08-24 09:11:00
【问题描述】:

我创建了一个带有选项卡的视图,每个选项卡都有一个带有 ajax 提交和 gridview 的表单。我在选项卡小部件中使用renderpartial 来呈现表单和gridview,并在单击提交后过滤gridview。在我单击提交按钮之前,选项卡中的一切看起来都很好。单击提交后,它按预期过滤了gridview..但它没有加载引导javascript和css,因此布局完全混乱,选项卡和菜单栏都显示为列表,页面继续加载。

任何人都知道为什么它没有加载我在主配置中预加载的所需脚本和 css。从视图调用 ajax 函数时是否必须单独指定一些内容。

编辑:添加代码

标签小部件的代码(producers.php)

 <?php $this->widget(
 'bootstrap.widgets.TbTabs',
 array(
 'type' => 'tabs', 
 'tabs' => array(

array('label' => 'Monthly' ,'id' => 'tab1', 
                   'content' => $this->renderPartial('_prod_monthly',array('dataProvider' => $dataProvider,'dataProvider2' => $dataProvider2 ,'dataProvider3' => $dataProvider3, 'opm' => $opm, 'month' => $month),true,true),
                   'active' => true),
array('label' => 'Weekly' ,'id' => 'tab2', 
                  'content' => $this->renderPartial('_prod_weekly',array('dataProvider4' => $dataProvider4,'dataProvider5' => $dataProvider5 ,'dataProvider3' => $dataProvider3, 'opm' => $opm, 'week' => $week),true,true)),
array('label' => 'Daily', 'id' => 'tab3', 'content' => 'ABC'  )),

)); ?>

部分视图代码(_prod_monthly.php):

$form = $this->beginWidget(
    'bootstrap.widgets.TbActiveForm',array(
    'id' => 'form_monthly',
    'enableAjaxValidation'=>true,
    'type' => 'inline',
    'method' => 'get',
    'htmlOptions' => array('class' => 'well','onsubmit'=>"return false;",/* Disable normal form submit */
                           'onkeypress'=>" if(event.keyCode == 13){ send2(); } " /* Do ajax call when user presses enter key */),)); ?>
Select Month: 
<?php echo CHtml::dropDownList('month', $month,
           $sel_month); ?> &nbsp;
Select Employee: 
<?php echo CHtml::dropDownList('opm', $opm,
           $sel_opm); ?> &nbsp;              
     <?php $this->widget('bootstrap.widgets.TbButton', 
  array(
    'buttonType'=>'button', 
    'label'=>'Submit',
    'type' =>'primary',
    'htmlOptions'=> array('onclick' => 'send2()'),)
  );
   $this->endWidget();  
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
'sortableRows'=>true,
'afterSortableUpdate' => 'js:function(id, position){ console.log("id: "+id+", position:"+position);}',
'type'=>'striped bordered hover',
'dataProvider'=>$dataProvider,
'type'=>'striped bordered responsive',
'template' => "{summary}\n{items}\n{extendedSummary}\n{exportButtons}"));?>

<script type="text/javascript">

function send2()
{

var data=$("#form_monthly").serialize();


$.ajax({
type: 'GET',
url: '<?php echo Yii::app()->createAbsoluteUrl("op/producers"); ?>',
data:data,
success:function(data){
            document.write(data); 
          },
error: function(data) { // if error occured
     alert("Error occured.please try again");
     alert(data);
},

dataType:'html'});
}
</script>

谢谢。

【问题讨论】:

  • 你能展示你的代码吗?
  • @OnnoRokomHabib 代码已添加..
  • 您需要在被Ajax替换的部分中包含Javascript代码。在 Ajax 调用之后,与 Javascript 项的“连接”会丢失。这是 Yii 中众所周知的事情。我认为它将在 Yii2 中解决:-)
  • @user3265427 我尝试手动将所有 javascript 和 css 放入部分渲染文件中。所以 css 已加载,javascript 也已加载。但页面继续加载并且永远不会停止...手动一次停止 ajax 按钮不起作用

标签: javascript php css ajax yii


【解决方案1】:

目前还没有基于 Yii 的使用 AJAX 处理 UI-Widget 的解决方案,并且永远不会出现。

很可能,这在 Yii2 中再也不会发生了。主要问题在于您缺少 JS-Ressources 和 Binding(您已经知道)。 Yii 将在布局过程中生成那些代码(您缺少这些代码),这些代码不会在“AJAX”请求中调用。不要尝试自己放入 JS-Ressources。 Yii 生成的 JS-Cods 真的很棘手……而且手动处理也不是那么容易。这会带来很多问题。

我的解决方案:我不使用 Yii 中包含的任何“UI”功能。它们伴随着很多问题(Ajax、多重公告等)。自己编写或使用jQueryUI 编写该功能并不难。

看看Tab feature 并尝试自己编写.. 并快乐! :)

【讨论】:

  • 我现在不使用制表符.. 只是为每个表单创建了单独的链接.. 我决定仅将制表符用于静态内容..
猜你喜欢
  • 2015-02-14
  • 2017-11-24
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 2014-04-07
  • 2010-10-06
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多