【问题标题】:Cross-Domain XHR uploading via Javascript [duplicate]通过 Javascript 跨域 XHR 上传 [重复]
【发布时间】:2012-03-30 12:51:36
【问题描述】:

可能重复:
Parsing xml/json response in IE9

我想使用 Imgur API 实现一个 Javascript 上传器(我认为这是 Stackoverflow 使用的)。但是,我无法使其工作。我尝试了Ajax Upload,但我得到“访问控制允许标头不允许请求标头字段 X-Requested-With”。奇怪的是,我使用了this 插件,但没有收到该错误。相反,我收到了一个 XML 响应,上面写着 <message>No image data was sent to the upload api</message>(我认为这是因为我无法将文件对象作为名为“图像”的参数发送),如 documentation 中所述:

图片 |必填 |发布 |二进制文件、base64 数据或 URL

所以,我的一般问题是:以跨浏览器(IE8+、Chrome、Firefox 和朋友)的方式上传到 Imgur(考虑到它们允许跨域 XHR,这是一个很大的优势)的最简单方法是什么?.

我还阅读了一些关于HTML5's FormData object 的信息,但似乎即使是现在,跨浏览器支持也不是很好,我不确定是否有针对 IE8+、Safari 等的 javascript 实现。

更新:我设法让这个(几乎)使用 Jquery Form Plugin 工作,但我仍然遇到this 问题(与 IE9 相关)。也许这与解决这个问题有关,而这反过来又会解决另一个问题。

UPDATE2: 为了将来参考,Jquery 表单插件可以正常工作。但是,解析包含来自 Imgur 的所有相关数据的 XML 响应时存在问题。有关此问题的更多信息,请参阅Parsing xml/json response in IE9。简而言之:JSON 不是一种选择,XML 应该可以工作,但不能。您可以尝试使用服务器端脚本,通过 AJAX 将请求发送到服务器端脚本,让您的脚本发送上传并正确接收响应。为了不偏离真正的问题,我将关闭这个问题。


任何帮助将不胜感激。

【问题讨论】:

  • 我强烈建议阅读this

标签: jquery ajax plugins file-upload cross-domain


【解决方案1】:

Imgur API documentation 中有一个完整的 JavaScript 示例。

function upload(file) {
   // file is from a <input> tag or from Drag'n Drop
   // Is the file an image?
   if (!file || !file.type.match(/image.*/)) return;

   // It is!
   // Let's build a FormData object
   var fd = new FormData();
   fd.append("image", file); // Append the file
   fd.append("key", "API_KEY"); // 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);
}

【讨论】:

  • 当然可以,但这不是跨浏览器解决方案。
  • @RobertSmith 您没有在问题中将其指定为需要。但是,有了这个,您应该能够弄清楚如何在任何浏览器中执行此操作。他们的示例在哪个浏览器中不起作用?
  • 其实帮助很大。看到这个问题:stackoverflow.com/questions/9746515/….
  • 顺便说一句,我在跨浏览器要求中添加了提及。
  • 我在后端使用 java servlet 尝试了这个脚本。文件上传成功。但是我需要在 AJAX 调用完成时显示成功消息。很快就会发布一个关于这个的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2016-09-19
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多