Javascript Highcharts、Yii和正文内容重新加载
我有一个视图,可以在Javascript Highcharts、Yii和正文内容重新加载,javascript,php,jquery,yii,highcharts,Javascript,Php,Jquery,Yii,Highcharts,我有一个视图,可以在CListView和Highcharts图形中呈现一些数据 请注意,CListView的分页器的工作方式如下:它向服务器请求“新页面”,服务器呈现页面的全部内容并将其发送到CListView。然后将正文替换为正在发送的内容,如下所示:$('body').html(呈现的html\u响应) 我还有一个模仿这种行为的dropDownList。代码如下: <?php echo CHtml::dropDownList('usage', 'cg', array(
CListView
和Highcharts图形中呈现一些数据
请注意,CListView
的分页器的工作方式如下:它向服务器请求“新页面”,服务器呈现页面的全部内容并将其发送到CListView
。然后将正文替换为正在发送的内容,如下所示:$('body').html(呈现的html\u响应)
我还有一个模仿这种行为的dropDownList
。代码如下:
<?php
echo CHtml::dropDownList('usage', 'cg', array(
'd'=>'Daily',
'm'=>'Monhly'
), array(
'ajax'=>array(
'type'=>'POST',
'url'=>$this->createUrl('admin/user', array(
'id'=>$user->id)
),
'update'=>'body',
'data'=>array('cg'=>'js:$(this).val()'),
'options'=>array(
Yii::app()->session['cg']=>array(
'selected'=>true
)
)
)
));
?>
但是我得到了典型的未定义的
javascript错误(这意味着有东西试图使用未定义的Highcharts
)
问题在哪里?我如何解决它?如下错误链接所示
//init
$('#container').highcharts({});
//select onchange
$('#container').highcharts().destroy();
已在页面中定义了Highcharts
此错误发生在第二次在同一页面中加载Highcharts或Highstock时,因此Highcharts命名空间已定义。请记住,Highstock中包含Highcharts.Chart构造函数和Highcharts的所有功能,因此,如果同时运行Chart和StockChart,只需加载Highstock.js文件
您正在加载highcharts javascript两次。你可以试试
a) 在第一次加载时启用highcharts,然后在下一次加载时禁用它,例如检查ajax
b) 使用自定义javascript检查highcharts是否已按中的方式加载
c) 使用为您处理js和css加载的
我建议你用最后一个。这个问题困扰了我好几次,直到我发现它。它不需要单独列出每个javascript函数/文件
编辑
您可以编辑代码以使用相同的update
功能,而不是编辑listview js:
<?php
echo CHtml::dropDownList('usage', 'cg', array(
'd'=>'Daily',
'm'=>'Monhly'
), array(
'onChange'=>'$.fn.yiiListView.update("your-list-id", {
data: {"usage":$(this).val()},
type: "POST"
});'
));
?>
这并不能解决问题。我试着把代码放在多个地方。在发送请求之前/之后、替换DOM之前/之后以及插入新图表之前。好的,我正在我的行动之前代码中执行您的a
建议,对吗?那也不行,不行。您的beforeAction
首先阻止加载highcharts,因此出现错误。不,我的beforeAction
仅当脚本是AJAX请求时才阻止加载脚本(因此是第二次)。是的,我的错。我还没有完全阅读你的评论。这可能是因为您正在更换车身
CListView
只替换它的html元素而不是正文。同样,AFAIKCListView
请求整个正文并替换整个正文。至少这是我在请求-响应中看到的。请编辑您的帖子并添加所有相关的代码片段,如(主视图、部分视图和控制器)
<?php
echo CHtml::dropDownList('usage', 'cg', array(
'd'=>'Daily',
'm'=>'Monhly'
), array(
'onChange'=>'$.fn.yiiListView.update("your-list-id", {
data: {"usage":$(this).val()},
type: "POST"
});'
));
?>