我正在使用bit.ly url 缩短服务来缩短某些 url 被发送到“在 twitter 上分享”功能的时间。我只想在用户实际按下共享按钮时加载 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 方法时则不行。