Размещать jQuery ajax-форму так же, как обычную html-форму, нарушая ту же политику происхождения - PullRequest
0 голосов
/ 23 марта 2012

Я написал решение jQuery для отправки формы на сторонний домен. URL третьей стороны принимает формы, отправленные с других доменов, когда форма размещена с обычным HTML. Я не могу этого добиться с помощью jQuery и $ .post.

Пример: URL отправителя: http ... domain1 URL получателя: https ... domain2

Когда я отправляю форму на domain1.com, используя обычный HTML, все работает нормально. Проблема в том, что когда я использую $ .post (), jQuery выдает ошибку, как только целевой домен использует https. Ie8 выдает ошибку уже, когда URL получателя http ... domain2.

Мой вопрос заключается в том, как я могу использовать 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 голосов
/ 23 марта 2012

Я не уверен, сможем ли мы ПРЕРЫВАТЬ ту же политику происхождения. Но мы все еще можем заставить все работать (используя прокси и настраивая ту же политику происхождения).
Вы можете использовать прокси-сервер PHP в одном домене для выполнения междоменного вызова (так как браузеры, такие как Mozilla, не позволяют вам совершать междоменный вызов). Переадресация каждого запроса на прокси и выполнение междоменного вызова через прокси.

enter image description here

Для получения более подробной информации с примером PHP прокси http://developer.yahoo.com/javascript/howto-proxy.html

...