3

这就是我正在尝试的:

$.ajax({
  type: 'GET',
  url: 'http://imgur.com/upload/',
  data: {
    url: 'http://upload.wikimedia.org/wikipedia/commons/3/3e/Phalaenopsis_JPEG.png'
  },
  complete: function(jqXHR, textStatus) {
    console.log(jqXHR.getAllResponseHeaders());
  }
});

我只是得到一个空字符串。

任何帮助,将不胜感激。

编辑:

这些是我可以在 Firebug 中看到的响应标头:

服务器:nginx
日期:2011 年 7 月 2 日星期六 03:04:26 GMT
内容类型:文本/html;字符集=utf-8
传输编码:分块
连接:关闭
设置 Cookie:IMGURSESSION=asdfasdfasdfasdf;路径=/; 域名=.imgur.com
服务器ID=www4;路径=/
到期:1981 年 11 月 19 日星期四 08:52:00 GMT
缓存控制:无存储、无缓存、必须重新验证、后检查 = 0、预检查 = 0
Pragma:无缓存
地点:http://imgur.com/ocuVX
内容编码:gzip
变化:接受编码
4

3 回答 3

5

我在这里找到了一种解决方案:https ://hacks.mozilla.org/2011/03/the-shortest-image-uploader-ever/

function upload(url) {
  // Let's build a FormData object

  var fd = new FormData();
  fd.append("image", url); // Append the file
  fd.append("key", "6528448c258cff474ca9701c5bab6927");
  // Get your own key: http://api.imgur.com/

  // Create the XHR (Cross-Domain XHR FTW!!!)
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "http://api.imgur.com/2/upload.json"); // Boooom!
  xhr.onload = function() {
    // Big win!
    // The URL of the image is:
    JSON.parse(xhr.responseText).upload.links.imgur_page;
   }
   // Ok, I don't handle the errors. An exercice for the reader.
   // And now, we send the formdata
   xhr.send(fd);
 }

显然,此解决方案需要 POST,这意味着您需要使用 API 密钥。我找不到任何使用 API-keyless GET 方法获得响应的方法。

我可以设法在没有 API 密钥的情况下进行上传的唯一方法是通过 YQL 并从诊断中获取最终的重定向 URL:

urlToImgur = (url, callback) ->
  upload_url = "http://api.imgur.com/2/upload?url=#{url}"
  $.ajax
    url: 'http://query.yahooapis.com/v1/public/yql'
    dataType: 'jsonp'
    data:
      q: "select none from html where url='#{upload_url}'"
      diagnostics: true
    success: (data) ->
      redirects = data.query.diagnostics.redirect
      image_url = redirects[redirects.length-1].content
      callback image_url
于 2011-07-02T05:28:56.510 回答
2

是 JSONP 调用吗?那时你不会得到任何标题。另请参阅:jqXHR.getAllResponseHeaders() 不会返回所有标头

于 2011-07-02T03:00:08.060 回答
0

确保您使用 > jQuery 1.5 并确保将 crossDomain:true 添加到您的 ajax 属性

于 2011-07-02T03:50:09.203 回答