JQuery AJAX междоменный - PullRequest
       28

JQuery AJAX междоменный

460 голосов
/ 17 августа 2010

Вот две страницы, test.php и testserver.php.

test.php

<script src="scripts/jq.js" type="text/javascript"></script>
<script>
    $(function() {
        $.ajax({url:"testserver.php",
            success:function() {
                alert("Success");
            },
            error:function() {
                alert("Error");
            },
            dataType:"json",
            type:"get"
        }
    )})
</script>

testserver.php

<?php
$arr = array("element1",
             "element2",
             array("element31","element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>

Теперь моя проблема: когда оба эти файла находятся на одном и том же сервере (локальном или веб-сервере), он работает и вызывается alert("Success"); Если он находится на разных серверах, то есть testserver.php на веб-сервере и test.php на localhost, он не работает, и alert("Error") выполняется. Даже если URL внутри ajax изменен на http://domain.com/path/to/file/testserver.php

Ответы [ 14 ]

4 голосов
/ 17 августа 2010

Из документов Jquery ( ссылка ):

  • Из-за ограничений безопасности браузера большинство запросов "Ajax" подчиняются той же политике происхождения;запрос не может успешно получить данные из другого домена, субдомена или протокола.

  • На запросы скрипта и JSONP не распространяются одинаковые ограничения политики происхождения.

Так что я бы понял, что вам нужно использовать jsonp для запроса.Но сам не пробовал.

1 голос
/ 03 марта 2018

Я знаю 3 способа решения вашей проблемы:

  1. Во-первых, если у вас есть доступ к обоим доменам, вы можете разрешить доступ ко всем другим доменам, используя:

    header("Access-Control-Allow-Origin: *");

    или просто домен, добавив приведенный ниже код в файл .htaccess:

    <FilesMatch "\.(ttf|otf|eot|woff)$"> <IfModule mod_headers.c> SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.net|dev02.otherdomain.net)$" AccessControlAllowOrigin=$0 Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin </IfModule> </FilesMatch>

  2. вы можете иметь ajax-запрос к файлу php на вашем сервере и обрабатывать запрос к другому домену, используя этот файл php.

  3. вы можете использовать jsonp, потому что ему не нужно разрешение. для этого вы можете прочитать ответ нашего друга @BGerrissen.
0 голосов
/ 04 мая 2018

работает, все что нужно:

PHP:

header('Access-Control-Allow-Origin: http://www.example.com');
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');

JS (jQuery ajax):

var getWBody = $.ajax({ cache: false,
        url: URL,
        dataType : 'json',
        type: 'GET',
        xhrFields: { withCredentials: true }
});
0 голосов
/ 24 июля 2017

Для Microsoft Azure это немного отличается.

Azure имеет специальный параметр CORS, который необходимо установить. Это по сути то же самое за кулисами, но простая установка заголовка, о котором упоминает Джошуар, не сработает. Документацию по Azure для включения междоменного домена можно найти здесь:

https://docs.microsoft.com/en-us/azure/app-service-api/app-service-api-cors-consume-javascript

Я возился с этим несколько часов, прежде чем понял, что на моей хостинговой платформе есть эта особая настройка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...