我使用bit.ly url shortening service來縮短某個url被髮送到「share on twitter」函數。我只想在用戶實際按下共享按鈕時才加載bit.ly url(由於bit.ly的最大並行請求限制)。 Bit.ly's REST API使用縮短的url返回JSON回調,這會使整個場景異步。如何使用jQuery click事件根據JSON查詢異步更改href值
我試着停止點擊事件,並等待JSON調用在啓動點擊之前返回一個值。
我有下面的簡化代碼的jQuery(文件)。就緒():
更新後的代碼(簡單化了)!
jQuery("#idofaelement").click(function(event) {
event.preventDefault(); //stop the click action
var link = jQuery(this);
bitlyJSON(function(shortUrl) {
link.attr("href", function() {
//process shortUrl
//return finalized url;
}).unbind().click();
});
});
而下面的代碼來處理bitly縮短(工作得很好):
function bitlyJSON(func) {
//
// build apiUrl here
//
jQuery.getJSON(apiUrl, function(data) {
jQuery.each(data, function(i, entry) {
if (i == "errorCode") {
if (entry != "0") {
func(longUrl);}
} else if (i == "results") {
func(entry[longUrl].shortUrl);}
});
});
} (jQuery)
在href獲取其值發生變化,但最後。點擊()事件永遠不會被解僱。這在爲href定義靜態值時工作正常,但在使用異步JSON方法時不起作用。
你能否在這裏提供適合你的情況(靜態值)? – 2009-10-27 07:55:56
用於測試的staic值:jQuery(「#idofaelement」)。click(function(event){link.attr(「href」,「http:// urlhere」);}); – pavsaund 2009-10-27 08:00:45
是什麼在'//處理shortUrl'這個異步? – AnthonyWJones 2009-10-27 08:35:57