2013-06-26 70 views
1

我正在構建一個利用AJAX和jQuery的Codeigniter應用程序。在我的意見之一,我有:主播通過AJAX調用ID

的意見/用戶/ index.php文件

<?php echo anchor('users/edit', 'Edit Profile', array(
    'class' => 'user-link', 
    'id' => 'edit' 
));?> 

<?php echo anchor('users/private_messages', 'Private Messages', array(
    'class' => 'user-link', 
    'id' => 'private_messages' 
));?> 

<div id="ajax-loader"><img src="<?php echo base_url();?>img/loading.gif"/></div> 
<div id="result"></div> 

<script type="text/javascript"> 
$(function(){ 
    $('.user-link').click(function(event) { 
     event.preventDefault(); 
     $.ajax({ 
      url: $(this).attr('href'), 
      type: 'POST', 
      async: true, 
      beforeSend: function(){ 
       $('#result').hide(); 
       $('#ajax-loader').show(); 
      }, 
      error: function(xhr, status, thrown){ 
       alert(xhr + ',' + status+ ',' + thrown); 
      }, 
      complete: function(){ 
       $('#ajax-loader').hide(); 
      }, 
      success: function(data) { 
       $('#result').empty().append(data); 
       $('#result').fadeIn('slow'); 
      } 
     }); 
    }); 
}); 
</script> 

這工作得很好,它抓住每個錨的href值並加載上點擊的方法。現在我想要做的是有訪問錨的的id,例如加載與AJAX方法的能力,如果我訪問

http://appdomain.com/users/index#edit

我想抓住的是,href值使用AJAX進行定位和調用。這背後的原因是,我有Edit控制器指向users/index內設置幾個重定向,我需要用AJAX刷新後再次調用該方法,所以我想是這樣的:

redirect(users/index#edit)

這是否實用?我需要一種在頁面加載時啓動對特定方法的AJAX調用的方法。任何建議將不勝感激。

編輯:

的JavaScript然後檢查它似乎工作拼搶哈希值:

var hash = window.location.hash; 
var id = hash.substring(0); 
if(id == '#edit' || id == '#private-messages'){ 
    $.ajax({ 
     url: $(id).attr('href'), 
     type: 'POST', 
     async: true, 
     beforeSend: function(){ 
      $('#result').hide(); 
      $('#ajax-loader').show(); 
     }, 
     error: function(xhr, status, thrown){ 
      alert(xhr + ',' + status+ ',' + thrown); 
     }, 
     complete: function(){ 
      $('#ajax-loader').hide(); 
     }, 
     success: function(data) { 
      $('#result').empty().append(data); 
      $('#result').fadeIn('slow'); 
     } 
    }); 
} 

回答

1

我認爲這是不正確的方法。您正試圖將數據放入您將在其他地方使用的DOM中。

現在你可能能夠擺脫它,但如果你的過程變得更復雜一點,你會遇到問題。

該DOM是一個視圖,而不是一個模型。 JavaScript是你的模型,所以如果你需要保留一些數據進行處理,請確保所有數據都在JavaScript中可用。

你會知道你將擁有哪些按鈕以及附加到哪個過程。您可以使用jQuery將按鈕鏈接到流程。您應該僅通過鏈接替換$(this).attr('href'),這可能是由服務器知道URL所產生的內容。

您可以把內嵌PHP模塊,如:你從PHP需要一次全部

{ 
    url: <?php echo json_encode($url); 
} 

或者你可以導入的一切:

var my_data = <?php echo json_encode(array("url" => $url));?>; 

{ 
    url: my_data.url 
} 

這種方法可以確保你的HTML保持清潔和你總是有空間發展你的模型。

下一步,就是堅持以你的模板遷移到JavaScript的,所以你不需要CSS選擇器了:)

+0

感謝您的建議,這很可能是正確的做法,如果我是加載與AJAX的所有方法,但是我只在我的兩個觀點中發送請求,所以我認爲我的方法(請參閱編輯)可能在小範圍內最實用。 – Dan