动态创建javascript

时间:2014-08-06 10:11:22

标签: php yii

我开发了简单的应用程序,它生成外部javascript文件以便在现场插入。使用与用户设置相关的一些数据生成的脚本。 这是我在Yii上的第一个项目。 我创建了Controller来从db获取用户数据。

public function actionScriptout($id)
{
    $this->layout= '//layouts/scriptout'; //empty layout
    $model=Scripts::model()->findByAttributes(array('code'=>$id));
    if($model===null)
        throw new CHttpException(404,'The requested page does not exist.');
    else {
        $params= json_decode($model->params);
        $script= $model->serviceScript($params->id, $params->service);

        echo $script .' '. $params->script;
    }
}

更新:脚本已在 $ model-> serviceScript($ params-> id,$ params-> service)中重新出现; 我在函数返回值之前检查了调试器中的 $ script 变量,一切正常:变量包含所有脚本。

public function serviceScript($id, $text) {
    $script= file_get_contents(Yii::app()->BasePath . '/../js/service.js');
    $script= str_replace(array("\n", "\r"), '', $script);
    $script= str_replace('##id##', $id, $script);
    $out= CJSON::encode($text);
    $script= str_replace('##text_rep##', $out, $script);
    return $script;
}

正常情况下,生成结果

    document.getElementById('##id##').innerHTML = '88 88 888';
var stype= ['google.', 'yandex.', 'vk.', 'facebook.'];
var text_rep= ##text_rep##;
window.onload= function() {
    for (i=0; i<stype.length; i++) {
        if (document.referrer.search(stype[i]) != -1) {
            document.getElementById('##id##').innerHTML = text_rep[i];
        } else {
            document.getElementById('##id##').innerHTML = '88 88 888';
        }
    }
}

脚本可用于网址http://domen.name/index.php?r=scripts/scriptout&id=153e1edd3e2b5e6.81264252

但它仅输出此部分

document.getElementById('footer').innerHTML = '88 88 888'; 
var stype= ['google.', 'yandex.', 'vk.', 'facebook.']; 
var text_rep= [null,"wdwdw",null,"dwd"]; 
window.onload= function() { for (i=0; i

正确输出所有脚本需要做什么?

1 个答案:

答案 0 :(得分:0)

我通过添加行

来解决问题
Header("content-type: application/x-javascript");

布局文件。