Javascript 使用JQuery.ajax在另一个域上发布

Javascript 使用JQuery.ajax在另一个域上发布,javascript,jquery,ajax,forms,cross-domain,Javascript,Jquery,Ajax,Forms,Cross Domain,我需要从运行在Chrome上的web应用程序发送一个多部分表单POST请求。 这适用于以下代码: <form method="post" action="http://localhost:999/some/path" target="iframeId" id="mainForm"> ... </form> <iframe id="iframeId" name="iframeId" width="100%"></iframe> 当我运行此代码时,出

我需要从运行在Chrome上的web应用程序发送一个多部分表单POST请求。 这适用于以下代码:

<form method="post" action="http://localhost:999/some/path" target="iframeId" id="mainForm">
...
</form>
<iframe id="iframeId" name="iframeId" width="100%"></iframe>
当我运行此代码时,出现以下错误:

XMLHttpRequest无法加载localhost:999/some/path。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“file://”


为什么将文章的目标设置为iFrame有效,而ajax无效?有没有办法解决这个问题,以便能够构建我自己的多部分负载?

要发出跨域AJAX请求,接收域必须接受CORS请求,或者需要以JSONP格式发送。当您试图发送由多个部分组成的表单数据时,后者实际上并不适用于您

您唯一的选择是检查接收域是否确实接受CORS。如果没有,则需要在服务器端发出此请求

这一切都是由于,这是所有现代浏览器现在都实现的安全策略

为什么将文章的目标设置为iFrame有效,而ajax无效

因为Ajax会让触发请求的站点(Mallory的站点)上Alice浏览器中运行的JavaScript访问Bob站点的响应(当只有Alice和Bob可以访问时,可能会将私有数据泄漏给Mallory)

iframe还有其他机制来阻止JS访问数据

有没有办法解决这个问题,能够构建我自己的多部分负载

。主要有:

  • JSONP(不适用于POST请求)
  • 让JS向同一台服务器发出请求,然后使用服务器端代码进行中继

唯一的解决方法是将数据发送到您的服务器,然后再发送到另一个域,因为。我相信ajax不会在另一个域上发出这种请求,您签出jsonp了吗?
var boundary = "---------------------------7da24f2e50046";
var body = '--' + boundary + '\r\n'
     + 'Content-Disposition: form-data; name="file";'
     + 'filename="temp.bin"\r\n'
     + 'Content-type: application/octet-stream\r\n\r\n'
     + body + '\r\n'
     + boundary + '--';

$.ajax({
    contentType: "multipart/form-data",
    data: body,
    type: "POST",
    url: "http://localhost:999/some/path",
    success: function (data, status) {
        alert('done');
    }
});