2012-07-31 80 views
8

我打電話的功能,從這個代碼:如何AJAX調用一次

<div id="header-button-news" class="header-button-info"> 
     <a href="javascript:;" title="Новости" onclick="showNews()"></a> 
     <div class="new">2</div> 
    </div> 

我的功能是

function showNews() 
{   
     //other js which show block 

     jQuery("#loader").show(); 


     //ajax which load content to block 
     jQuery.ajax({ 
      type: "GET", 
      url: link, 
      dataType: "html", 
      success: function(data) { 
       jQuery('#top-info-news').html(data); 
      }, 
      complete: function(){ 
       jQuery('#loader').hide(); 
      }, 
     }); 
} 

我怎樣才能讓只有一次的AJAX調用?所以當內容加載和頁面不refresed不加載ajax?我試圖做布爾變量,但沒有,我認爲這是因爲我每次調用函數。請給我一個想法如何做。

謝謝

回答

15

當你想對事件做些什麼的時候。

確定您何時已經加載數據。

var loaded = false; 

function showNews() { 
    //other js which show block 

    jQuery("#loader").show(); 


    if(loaded) return; 

    //ajax which load content to block 
    jQuery.ajax({ 
     type: "GET", 
     url: link, 
     dataType: "html", 
     success: function(data) { 
      jQuery('#top-info-news').html(data); 
     }, 
     complete: function(){ 
      jQuery('#loader').hide(); 
     }, 
    }); 

    loaded = true; 
} 

或者使用one.當你想調用它一次。

<a href="javascript:;" title="Новости" onclick="showNews()" class="showNews"></a> 

jQuery('.showNews').one('click', function() { 
    // your code 
}); 

"Attach a handler to an event for the elements. The handler is executed at most once per element."

reference

11

使用.one()功能:

附加的處理程序爲元素的事件。處理程序每​​個元素最多執行一次。

<a href="#" title="Новости" id="shownews"></a> 

我增加了一個id屬性到錨,讓一個更簡單的綁定,但你可以使用$("#header-button-news a").one

$(document).ready(function() { 
    $('#shownews').one('click', function (evt) { 

    evt.preventDefault(); // prevent default click action 

    jQuery("#loader").show(); 
    //ajax which load content to block 
    jQuery.ajax({ 
     type: "GET", 
     url: link, 
     dataType: "html", 
     success: function (data) { 
     jQuery('#top-info-news').html(data); 
     }, 
     complete: function() { 
     jQuery('#loader').hide(); 
     }, 
    }); 
    }); 
}); 

也用於event.preventDefault(),以防止錨的默認操作從被跟蹤

1
<div id="header-button-news" class="header-button-info"> 
    <a id="a_news" title="Новости"></a> 
    <div class="new">2</div> 
</div> 

JS:

$(function(){ 
    $('a#a_news').one('click',showNews); 
})