从ajax加载的脚本访问JavaScript函数

时间:2013-02-12 02:00:35

标签: php javascript ajax hmvc

我在PHP中使用CodeIgniter以HMVC方法开发了一个项目。

现在,我遇到了一个问题,我真的很困惑下一步做什么。 这是我的情况:

我有一个看起来像这样的观点:

//logs_v_month.php

<div id="logs" class="tab-pane active">

</div>

<script type="text/javascript">
$(function(){       
    $.ajax({
      url: "<?php echo load_global_assets('system/js/log.js')?>",
      dataType: "script",
      success: function(e){}
    });
});

</script>

然后我有一个控制器:

//view.php
function display_logs_month(){
    $data['logs_v'] = $this->load->view('logs_v_month');                        

echo json_encode($data);
}

然后我有另一个视图,这是主视图。

//logs.php
<div class="tab-content" id="logs_content">
    <!--logs loaded via ajax call-->
</div>
<script type="text/javascript">
function view_month(group_id, start_end){
$.ajax({
    type : "POST",
    dataType: "json",
    url : "<?=base_url()?>logs/view/display_logs_month",                        
    data : {"group_id" : group_id},
    success : function (data){  
        $("div#logs").remove();                     
        $("#logs_content").append(data.logs_v);//logs_v             
    },
    error : function(data){
    console.log(data);
    }
    });
}

logs.php视图有一个ajax调用,用于通过view.php控制器加载logs_v_month.php视图。

我的问题是,如何从logs.php视图中的logs_v_month.php访问JavaScript函数(也通过ajax加载)?

我尝试在网上搜索答案,人们给出的大多数答案都是使用eval()函数,但许多人不鼓励使用它。

有没有办法可以重构或重新安排我的JavaScript,这样我就可以轻松地在这种情况下访问它们?如果这可以帮助解决问题,我也会考虑使用Namespacing。

我刚开始学习CI和HMVC,所以我对此很新。

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要将返回的脚本放入页面的DOM中。

当您在ajax调用的success方法中获取脚本数据时,可以使用其中的代码创建一个脚本元素并将其附加到DOM,如:

success:function(data){
    var scriptElement = document.createElement('script');
    scriptElement.setAttribute('type', 'text/javascript');
    scriptElement.textContent = data;
    var head = document.getElementsByTagName('head').item(0);
    head.appendChild(scriptElement);
}

现在所有脚本都可以访问这些函数。