Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Highcharts、Yii和正文内容重新加载_Javascript_Php_Jquery_Yii_Highcharts - Fatal编程技术网

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元素而不是正文。同样,AFAIK
CListView
请求整个正文并替换整个正文。至少这是我在请求-响应中看到的。请编辑您的帖子并添加所有相关的代码片段,如(主视图、部分视图和控制器)
<?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"
        });'
    ));
?>