2013-02-12 88 views
0

我在HMVC方法中使用CodeIgniter在PHP中有一個項目。從ajax加載的腳本訪問JavaScript函數

現在,我遇到了一個問題,我真的很困惑接下來要做什麼。 這裏是我的情況:

我有一個觀點,看起來像這樣:

//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,以便在這種情況下訪問它們很容易?如果這可以幫助解決問題,我還會考慮命名空間。

我剛開始學習CI和HMVC,所以我對此很新。

謝謝!

回答

2

您需要將返回的腳本放入頁面的DOM中。

當你拿到劇本數據傳回在你的Ajax調用的成功方法,你可以用它裏面的代碼創建一個腳本元素,並將其追加到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); 
} 

現在所有腳本都可以訪問函數。

+0

對不起,遲到的回覆,我真的這樣做,它的工作!接受爲答案。謝謝! – 2013-03-06 04:02:15