2013-04-08 16 views
1

我一直在閱讀關於jQuery的延遲方法,並試圖在AJAX調用中實現它們。jQuery AJAX早期使用當前頁面數據觸發

我正在嘗試是聽一個元素(.slideLink)上點擊,搶相應href的值的內容,然後或者結果記錄或記錄錯誤,根據結果。

問題是,頁面加載後,會立即記錄當前頁面的內容。點擊.slideLink什麼都不做。

這是我到目前爲止有:

function getDetails(val){ 
    return jQ.get(val); 
}; 

// click handler 
jQ('#slides').on('click', '.slideLink', function(e){ 
    e.preventDefault(); 
    var addy = jQ(this).attr("href"); 
    getDetails(addy); 
}); 

jQ.when(getDetails()) 
    .done(function(results) { 
     console.log(results); 
    }) 
    .fail(function() { 
     console.log('It doesn\'t work... :('); 
    }); 

顯然誤解了我的基本原則,但我通過谷歌畫坯。

回答

1

一旦頁面加載,您就會觸發getDetails()。另外,每次執行getDetails()時,都會觸發一個單獨的請求並返回一個新的延遲。試試這個:

function getDetails(val){ 
    return jQ.get(val); 
} 

// click handler 
jQ('#slides').on('click', '.slideLink', function(e){ 
    e.preventDefault(); 
    var addy = jQ(this).attr("href"); 
    getDetails(addy).done(function(results) { 
     console.log(results); 
    }) 
    .fail(function() { 
     console.log('It doesn\'t work... :('); 
    });; 
}); 
+0

謝謝 - 這很完美!我正確地猜測'when()'事件在頁面加載時觸發'getDetails'嗎? – verism 2013-04-08 01:43:41

+0

是的 - 你是對的;)很高興我能幫忙! – mike 2013-04-08 01:47:51

1

貌似(from what I read in the docs)jQ.when(getDetails())是要直接從頁面加載時運行的功能。

使用ajax()而不是get()這樣可以更好地利用donefail回調屬性。

function getDetails(val) { 
    $.ajax({ 
     type: "GET", 
     url: val, 
     data: (yourdata), 
     success : function(){}, 
     error : function(){} 
    }) 
} 

此外,您還可以,如果你想直接調用.slideLinkclick()方法。

jQ('.slideLink').click(function(e) { 
    e.preventDefault(); 
    var addy = jQ(this).attr("href"); 
    getDetails(addy); 
}); 
+0

感謝您的提示:'ajax()' - 我沒有遇到任何提及它會更適合之前。 – verism 2013-04-08 01:46:16

+1

'get()'肯定有可用的回調選項,但'ajax()'方法使得它們無需鏈接即可正確構建。 'get()'只是'ajax()'方法的'GET'特定實現。 – SomeShinyObject 2013-04-08 01:48:03

+0

理想情況下,我希望將回調保持分開,因爲邏輯可能會在其他地方使用。我還可以用'ajax()'做這個嗎? – verism 2013-04-08 01:52:40

相關問題