Jquery 通过Javascript跨域XHR上传

Jquery 通过Javascript跨域XHR上传,jquery,ajax,plugins,file-upload,cross-domain,Jquery,Ajax,Plugins,File Upload,Cross Domain,可能重复: 我想使用imgurapi实现一个Javascript上传程序(我想这就是Stackoverflow使用的方法)。然而,我一直没能让它工作。我尝试了,但得到了“访问控制允许标头不允许X-Requested-With请求标头字段”。奇怪的是,我使用了插件,却没有得到那个错误。相反,我得到了一个XML响应,说没有图像数据被发送到上传api(我认为这是因为我无法将文件对象作为名为“image”的参数发送),如下所述: image | required | POST |二进制文件、base6

可能重复:

我想使用imgurapi实现一个Javascript上传程序(我想这就是Stackoverflow使用的方法)。然而,我一直没能让它工作。我尝试了,但得到了“访问控制允许标头不允许X-Requested-With请求标头字段”。奇怪的是,我使用了插件,却没有得到那个错误。相反,我得到了一个XML响应,说没有图像数据被发送到上传api(我认为这是因为我无法将文件对象作为名为“image”的参数发送),如下所述:

image | required | POST |二进制文件、base64数据或URL

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

我也读了一些关于的文章,但似乎即使是现在,跨浏览器支持也不是很好,我不确定是否有针对IE8+、Safari等的javascript实现

更新:我使用Jquery表单插件成功(几乎)实现了这一点,但我仍然存在问题(与IE9相关)。也许这与解决这个问题有关,而这个问题反过来又会解决另一个问题

更新2:为了将来的参考,Jquery表单插件工作正常。但是,解析包含来自Imgur的所有相关数据的XML响应时存在问题。请参阅有关此问题的更多信息。简而言之:JSON不是一个选项,XML应该可以工作,但它不能。您可以尝试使用服务器端脚本,通过AJAX将请求发送到服务器端脚本,并让脚本正确发送上传和接收响应。为了不分散人们对真实问题的注意力,我将结束这个问题



任何帮助都将不胜感激。

中有一个完整的JavaScript示例

函数上传(文件){
//文件来自标记或拖放
//文件是图像吗?
如果(!file | |!file.type.match(/image.*/)返回;
//是的!
//让我们构建一个FormData对象
var fd=新FormData();
fd.append(“image”,file);//追加文件
fd.append(“key”、“API_key”);//获取您自己的密钥:http://api.imgur.com/
//创建XHR(跨域XHR FTW!!!)
var xhr=new XMLHttpRequest();
xhr.open(“POST”http://api.imgur.com/2/upload.json);//嘘!
xhr.onload=函数(){
//大胜利!
//图像的URL为:
parse(xhr.responseText).upload.links.imgur\u页面;
}
//好的,我不处理这些错误。这是给读者的练习。
//现在,我们发送表单数据
xhr.send(fd);
}

我强烈建议阅读“确定”,但这不是一个跨浏览器的解决方案。@RobertSmith您在问题中没有指定这是一个需要。但是,有了它,您应该能够了解如何在任何浏览器中执行此操作。他们的例子在哪个浏览器中不起作用?事实上,它帮助了很多。看到这个问题:。顺便说一句,我提到了跨浏览器需求。我在后端使用java servlet尝试了这个脚本。文件已成功上载。但是我需要在AJAX调用完成时显示一条成功消息。我将很快发布一个关于此的问题。
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);
}