发布jQuery ajax的形式与普通的html表单相同,打破了同源策略

时间:2012-03-23 16:26:20

标签: jquery ajax same-origin-policy

我编写了一个jQuery解决方案,用于将表单提交给第三方域。当表单使用普通html发布时,第三方网址接受从其他域发布的表单。我不能用jQuery和$ .post来实现这一点。

实施例: 发件人网址:http ... domain1 接收者网址:https ... domain2

当我使用普通的html在domain1.com上提交表单时,一切正常。问题是当我使用$ .post()时,一旦目标域使用https,jQuery就会抛出错误。当接收者URL是http ... domain2时,Ie8已经抛出错误。

我的问题是如何使用jQuery并以与普通html相同的方式提交表单。我希望解决方案能够在ie8中工作。另外,我不想使用Access-Control-Allow-Origin:*(在目标服务器上设置为php中的头)。有没有办法使用jQuery,并发送ajax表单与普通的html表单相同的结果?

<html lang='sv'>
<head>
    <script src='js/jquery-1.7.1.min.js'></script>
    <script>
    $(function()
    {
        $.post(
            // works in all browsers but ie8 with Access-Control-Allow-Origin: *
            "http...domain2/?ts="+new Date().getMilliseconds(),
            // breaks in chrome, didn't test others
            //"https...domain2/?ts="+new Date().getMilliseconds(),
            { a:"a", b:"b" },
            function(responseText)
            {
                alert(responseText);
            },
            "json"  
            //"html" // seems to get same result as when using "json" above
        ).done(function(){
            alert("done!");
        }).error(function(event){
            alert("error!");
        });
    });
    </script>
</head>

<body>
 <!-- working form -->
 <form action="https...domain2/?ts=whatever" method="post">
  <textarea name="a">a</textarea>
  <textarea name="b">b</textarea>
  <input type="submit">
 </form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

我不确定我们是否可以违反同一原产地政策。但是我们仍然可以使用(使用代理和调整相同的原始策略) 您可以在同一个域上使用PHP代理进行跨域调用(因为像mozilla这样的浏览器不允许您进行跨域调用)。将每个reueest转发给代理并通过代理进行跨域调用。

enter image description here

有关示例PHP代理http://developer.yahoo.com/javascript/howto-proxy.html

的更多详细信息