2016-12-23 5 views
3

Мне нужно отправить запрос Get с перекрестным доменом с аутентификацией заголовка.Запрос на перекрестный домен с аутентификацией заголовка

Работает отлично в Chrome и Firefox, но у меня проблемы с Safari и IE. Также в случайных случаях он возвращает 401.

<script> 
var url = 'username:[email protected]'; 
$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    jsonpCallback: "callback", 
    success: function(json) { 
     alert(json); 
    } 
}); 
</script> 

Что было бы лучшим вариантом для решения этой проблемы?

+0

Вы получаете это «случайное» 401 с Firefox или Chrome или получаете его с помощью Safari и IE? Есть ли образец для этого? Как и в URL-адресе, отсутствует соответствующий протокол. Вы можете использовать 'console.log', а не' alert', чтобы получить содержимое переменной JSON. – Seth

+0

Для Safari и IE это даже не выполняется, и ничего не отображается в консоли. теперь я обнаружил, что IE не поддерживает имя пользователя и пароль в URL-адресе https://support.microsoft.com/en-in/kb/834489, поэтому я ищу любой другой способ иметь вызов ajax, который поддерживает перекрестное происхождение с заголовком аутентификация – p4pravin

+0

какая версия т. е. вы используете? –

ответ

2

Если я правильно понял вопрос, вы можете использовать обратный вызов beforeSend для добавления базовой проверки подлинности в запрос. Однако это не относится к jsonp или cross-origin.

beforeSend: function (xhr) { 
    xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password)); 
} 

https://jsfiddle.net/rn9Lp304/

+0

Кевин, не уверен, что я пропустил что-то, когда я пробовал с этим раньше. Его работа прекрасна. Спасибо – p4pravin

1

Для Internet Explorer 8 and 9 вам нужно использовать XDomainRequest Object

Internet Explorer 10+ делает запросы Междоменных нормально, как и все другие браузеры.

Как сказано в документации, Вы должны

  • создать объект XDR с использованием var xdr = new XDomainRequest();
  • открыть соединение с помощью метода GET использованием xdr.open("get", "username:[email protected]");
  • отправить данные обратно к серверу с использованием xdr.send();

Полный код ссылки можно показать, как на this thread по @Mark Pieszak

как обходной путь, чтобы установить username и password в обозревателе Internet Explorer можно установить следующие

DWORD для iexplore.exe в 0 в : [HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE].

-2

использование getJSON

$.getJSON("url",function (data) {/*code here*/}); 
+0

уже пробовал с ним, не повезло – p4pravin

+0

$ .getJSON() является сокращением метода $ .ajax() jQuery, было ли решение этой проблемы, объяснение по-прежнему было бы требованием относительно того, почему оно решает его – Greenstick

0

Я рекомендую вам попробовать две вещи:

В ajaxSetup, сделайте это:

$.ajaxSetup({ 
    ...., 
    xhrFields: { 
     withCredentials: true 
    }, 
    crossDomain: true, 
    .... 
}); 

В ваших запросах ajax задайте полный URL-адрес, например, в дополнение к флагом учетных данных.

'Access-Control-Allow-Origin: https://not-example.com' 
'Access-Control-Allow-Credentials: true' 

Для серверов с аутентификацией эти браузеры не допускают «*» в этом заголовке. Заголовок Access-Control-Allow-Origin должен содержать значение заголовка Origin, переданного клиентом.