1

我正在尝试制作一个小脚本来在 imgur 上重新托管网络上的图片。

这称为图像侧载,您只需将浏览器指向http://api.imgur.com/2/upload?url= + 图片的 Url

它不返回任何 XML 或 JSON 响应,因此我无法解析它以获取 img URL。

但我想我找到了一种方法来做到这一点,但不能让它正常工作。这是我正在使用的代码。

$(document).ready(function() {
    $("#button").click(function() {
        str = $("input").val().toString();
        link = "http://api.imgur.com/2/upload?url=" + str;
        var xhr = new XMLHttpRequest();
        xhr.open("GET", link);
        xhr.send();
        var headers = xhr.getAllResponseHeaders().toLowerCase;
        alert(headers);

    });

});

看看谷歌浏览器的控制台,这些是脚本运行后生成的结果。

我还不允许发布图片,所以这里是结果的链接:http: //i.imgur.com/xCyIP.png

我需要以某种方式访问​​第 4 个响应标头,因为即使此方法不返回任何可解析的 XML 或 JSON 响应,该链接也是上传的 img 的 URL,这正是我所需要的。

那么有没有办法访问该信息?为什么会被取消?

谢谢大家!

4

1 回答 1

0

好吧,API 必须返回一些东西,否则它是无用的。

实际上,http: //api.imgur.com/examples 建议您执行以下操作:

var xhr = new XMLHttpRequest();
xhr.open("GET", link);
xhr.onload = function() {
    var url = JSON.parse(xhr.responseText).upload.links.imgur_page;
    alert(url);
}
xhr.send();

编辑。好,我知道了。通常,上面的代码应该可以工作,但我认为 imgur 遇到了问题。我会报告错误。

虽然错误仍然存​​在,但这里有一个肮脏的解决方案来满足您的需求:

var xhr = new XMLHttpRequest();
xhr.open("GET", link);
xhr.onload = function() {
    html = xhr.responseText;
    alert(html.substr(html.indexOf('http://i.imgur.com/') + 19, 5));
}
xhr.send();

您的代码不起作用,因为您没有等待答案。您必须通过回调函数来捕获它。

编辑。上面的代码只在本地工作。当您使用 jQuery 时,让我介绍一下快捷方式$.post

$(document).ready(function() {
    $("#button").click(function() {
        $.post('http://api.imgur.com/2/upload.json', {
            key: 'ec575de603b936e54c2b4a9f232d537e',
            image: $("input").val().toString()
        }, function(data) {
            alert(data.upload.image.hash);
        });
    });
});​

http://jsfiddle.net/Le_Sphinx/rEfdS/

于 2012-08-09T23:07:03.093 回答