bit.ly URL 短縮サービスを使用して、「Twitter で共有」機能に送信される特定の URL を短縮しています。ユーザーが実際に共有ボタンを押したときにのみ、bit.ly URL をロードしたいと思います (bit.ly の最大 5 つの並列要求制限のため)。Bit.ly の REST APIは短縮された URL を含む JSON コールバックを返すため、シナリオ全体が非同期になります。
クリックイベントを停止し、クリックを開始する前に JSON 呼び出しが値を返すのを待つために、次のことを試しました。
jQuery(document).ready() に次の簡略化されたコードがあります。
更新されたコード (単純化しすぎ)!
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();
});
});
そして、ビット単位の短縮を処理する次のコード (問題なく動作します):
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 の値は変更されますが、最後の .click() イベントは決して発生しません。これは、href の静的な値を定義する場合は正常に機能しますが、非同期 JSON メソッドを使用する場合は機能しません。