1
function dlLink(title, currentArray, currentIndex, currentOpts) 
    {
        var img = new Image();
        img.src = 'Gallery/Wallpapers/' + title;
        html = img.width + ' x ' + img.height + '<br />'
                + '<a class = "nav" href = "Gallery/Wallpapers/' + title + '" target = "_blank">Download</a><br />http://';

        // set up default options
        var defaults = {
            login:      '*************',
            apiKey:     '*******************************',
            longUrl:    'http%3A%2F%2Fschnell.dreamhosters.com%2Fwallpapers.php%3Fwp=' + title
        };

        // Build the URL to query
        var daurl = "http://api.bit.ly/v3/shorten?"
                    + "&login=" + defaults.login
                    + "&apiKey=" + defaults.apiKey
                    + "&longUrl=" + defaults.longUrl
                    + "&format=json&callback=?";

        // Utilize the bit.ly API
        $.getJSON(daurl, function(results)  {
            $('#fancybox-title').append(results.data["url"].substr(7));
        });

        if(img.complete)
            return html;
    }

好的,这个函数的重点是它是一个 Fancybox 的回调,它将 HTML 内容放入它的“标题”部分。在本节中,我放置了图像的分辨率、下载链接和 bit.ly 链接,用于返回本网站上的图像 - http://schnell.dreamhosters.com/wallpapers.php?page=12 最初我使用的是 XMLHTTPRequest bit.ly URL 的问题,但我似乎已经解决了这些问题。

不过,现在的问题是,在返回语句出现之前,我需要变量“html”来拥有所有进入幻想框的 html 内容。虽然看起来一切都发生在 return 语句之前,但 jQuery 正在异步执行 $.getJSON() 函数,因此不能保证在 dlLink 结束之前 'html' 将包含内容。我需要一种方法来使事情的顺序发生在代码中,这样 $.getJSON 请求和随后的回调函数将始终在进入 return 语句之前完成它们正在做的事情。

编辑 - 我想出了该怎么做,上面的代码正确地按照我的意愿做。请看下面我的回答。

4

1 回答 1

0

好的,所以我在意识到一些事情后终于解决了这个问题。

1 - 在 $.getJSON() 的回调函数中,您应该对 JSON 数据做所有可以做的工作。

2 - 我试图放置链接的区域有 id 'fancybox-title',所以我继续说$('#fancybox-title').append(stuff);

3 - Fancybox 的标题(至少在内部显示时)只会根据格式化标题的功能完成时已经存在的文本行调整自身大小。之后附加到它的任何内容都不会占大小,因此标题区域将保持不变,您会看到文本行爬到图片中(很难找到这一点)。为了解决这个问题,我确保将第三行文本添加到我的“html”变量中——<br />http:// 这使得 Fancybox 将其标题区域调整为 3 行文本。然后在回调函数中,我使用 substr 获取从 http:// 之后到结尾的 bit.ly 链接。

于 2010-10-05T21:58:08.863 回答