好,基本上如此。
我向网页中注入了一些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的域将发生变化,并且我将无法访问响应。
最佳答案
对于Web开发,这是一个众所周知的难题,称为Same Origin Policy
Javascript阻止访问跨不同来源的页面的大多数方法和属性。术语“来源”是使用域名,应用程序层协议和运行脚本的HTML文档的端口号(在大多数浏览器中)定义的。当且仅当所有这些值都完全相同时,才将两个资源视为来源相同。
有几种解决方法。
Create your own proxy
创建一个仅将请求转发到另一台服务器并返回其响应的页面
或者,使用Apache的规则构成代理(请参见上面的链接)
使用他人的代理
对于典型的Use YQL to access yahoo's proxy的GET请求
对于POST请求,如果第三方支持Open Data Tables
或者,使用其他公共代理
查看第三方是否符合CORS规范
Cross domain POST query using Cross-Origin Resource Sharing getting no data back
如果您愿意在页面上稍加刷新,请尝试flXHR
它声称实现了确切的XHR api,并且还具有jquery plugin
这些几乎是您唯一的选择
关于javascript - jQuery跨域图片上传,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8544469/