jQuery跨域图片上传

时间:2011-12-17 11:41:07

标签: javascript jquery ajax cross-domain

好的,基本上。 我将一些javascript代码注入网页,并将该页面上的图像上传到另一台服务器。 现在我在我的域上运行它(当然),但是我需要将multipart / form-data请求发布到我不拥有的PHP文件中。 由于它是上传而不是简单的获取数据的请求,因此我不能在初始调用中使用jsonp,因为响应不在json中。

使用James Padolsey的跨域脚本,我可以跨域执行$ .get和$ .post请求,但由于我使用$ .ajax它不起作用。 He uses the Yahoo Query Language to acomplish this

这基本上就是我提出请求的方式

$.ajax({
url: 'http://website.com/upload.php',
type: 'POST',
contentType:'multipart/form-data',
data: postData,
success: successCallback,
error : function(XMLHttpRequest, textStatus, errorThrown) {
    console.log('Error');
}
});

我想完全基于JavaScript,以避免让我的服务器执行请求。 所以要重新上限,我可以获取图像字节并使用javascript发出请求。但到目前为止,我不能跨域,因为我是$ .ajax将内容类型设置为“multipart / form-data”。 有没有其他方法可以使用或不使用YQL进行跨域请求?

使用iframe发出请求将无效,因为iframe的域名会发生变化,我无权访问该回复。

1 个答案:

答案 0 :(得分:3)

这是一个众所周知且难以解决的网页开发问题,被称为Same Origin Policy

  

Javascript阻止访问不同来源的网页的大多数方法和属性。术语“origin”是使用域名,应用程序层协议和(在大多数浏览器中)运行脚本的HTML文档的端口号来定义的。当且仅当所有这些值完全相同时,才认为两个资源具有相同的来源。

有几种解决方法。

  1. Create your own proxy
    • 创建一个简单地将请求转发给其他服务器并返回其响应的页面
    • 或者,使用Apache的规则来形成代理(参见上面的链接)
  2. 使用其他人的代理
  3. 查看第三方是否符合CORS规范
  4. 如果您愿意在页面上留一点闪光,请尝试flXHR
    • 它声称实现了精确的XHR api,并且还有一个jquery plugin
  5. 这几乎是你唯一的选择