2015-12-03 3 views
0

Я пытаюсь сделать вызов AJAX с одного сервера, на вызов JSON на другом сервере. Я читал о настройке заголовка для CORS, но не знаю, что конкретно мне нужно сделать. Я на сервере A, вызывая запрос на сервер B, и получаю сообщение об ошибке:Настройка заголовка для вызова CORS AJAX

XMLHttpRequest не может загрузить http://serverB Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Происхождение 'http://serverA', следовательно, не допускается.

$.ajax({ 

    url: 'http://serverB/userList', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    success: function(data){ 

     alert(text.html(JSON.stringify(data))); 

    }, 
    error: function(e){ 

     alert(e); 
    } 

}); 

Я видел много разных способов, чтобы добавить к заголовку, но не уверен, что правильный путь, как смешиваются результаты (поиск StackOverflow примеры).

Каков правильный способ добавить пример вызова AJAX выше?

Благодаря Стив

+0

Какой сервер вы работаете? .Net (C#), Linux PHP? – vandsh

+0

Если сервер настроен правильно, jQuery должен позаботиться об этом автоматически. – timothyclifford

+0

это сервер Ubuntu Linux. Проект настроен как PHP, но в основном использует прямой HTML и JQuery с вышеуказанным вызовом AJAX. – SteveV

ответ

-1

Из того, что я видел, как клиент и сервер должны быть на той же странице «», когда дело доходит до CORS. Раньше на стороне сервера мне приходилось открывать Origins, Headers и Methods до *, по крайней мере, заставить его работать, а затем возвращаться и ограничивать его оттуда до соответствующих доменов и методов.

В .Net, WepApi Я использовал EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true }, чтобы довести меня до этой точки.

В Apache это может быть что-то подобное в вашем apache.conf

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Methods "*" 
Header set Access-Control-Allow-Headers "*" 
+0

Это стек Linux + PHP, поэтому не уверен, что это актуально. – timothyclifford

+0

@timothyclifford, он на самом деле упоминает Apache – Endless

+0

. К его чести, я добавляю его после вопроса типа сервера как ответ – vandsh

0

Вы должны избегать JSONP все вместе. это уже не безопасно ... И люди, которые хотят использовать еще один априод, созданный сегодня с помощью jsonp, могут стать подозрительными.

В PHP вы должны добавить заголовки, которые необходимы, прежде чем посылать данные

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

Кроме того, можно добавить его в .htaccess или Appache

Header set Access-Control-Allow-Origin "*" 

просто убедитесь, что вы не» т добавьте его ко всему, что вы не хотите делиться

А также есть сокращенный метод jQuery json ajax

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<pre></pre> 
 

 
<script> 
 
$.getJSON("https://api.github.com", function(res){ 
 
    $('pre').html(JSON.stringify(res, null, " ")) 
 
}) 
 
</script>

и мой Favorit Fetch api без зависимости

<pre></pre> 
 

 
<script> 
 
    fetch("https://api.github.com") 
 
    .then(res => res.json()) 
 
    .then(json => { 
 
    
 
     var pre = document.querySelector("pre"); 
 
     pre.innerText = JSON.stringify(json, null, " ") 
 
     
 
    }) 
 
</script>