2015-08-03 2 views
2

просто хотел спросить, как бороться с https + cross-domain url using $http?

Я использовал $ .ajax решить мою проблему, но причина, почему я хотел бы использовать более $ HTTP потому, что у меня есть $ HTTP-перехватчик поскольку использование $ .ajax занимает намного больше а не с помощью перехватчика для автоматизации процесса.

Я читал подобные сообщения [link1, link2, link3], но ни один из них не решил мою проблему.

У меня есть скриншот моей консоли, я надеюсь, что это имеет смысл: http-ajax.

Странная вещь является ВАРИАНТ Метод используется $ HTTP, который я поставил его POST

Вот мой код снимок:

$http({ 
    method: 'POST', 
    url: '/HearingCentre', 
    data: { 
     Type: ['P', 'V'] 
    }, 
    success: function (res) { 
     console.log(res); 
     d.resolve(res); 
    }, 
    error: function (res) { 
     console.log(res); 
     d.reject(res); 
    } 
}); 

Примечание: Я использую перехватчик $ http здесь, поэтому в основном URL-адрес будет добавлен с базовым URL-адресом API

$ .ajax версия

$.ajax({ 
    method: 'POST', 
    crossDomain: true, 
    url: 'https://ahtstest.hearing.com.au/services/api/HearingCentre', 
    data: { 
     Type: ['P', 'V'] 
    }, 
    success: function (res) { 
     console.log(res); 
    }, 
    error: function (res) { 
     console.log(res); 
    } 
}); 

У кого-нибудь есть решение для этого?

+0

Это Chrome предпечатной проверки ваш запрос, чтобы увидеть, какие методы дают вашим сервером. Вы должны разрешить CORS на своем сервере. –

+0

установить плагин corors в свой Google Chrome, затем включить его и попробовать – Ahmer

+0

Это может помочь ... http: //stackoverflow.com/questions/27729351/preflight-options-request-by-angularjs-not-working-with-chrome –

ответ

1
var userApp = angular.module('userApp', []); 
    userApp.controller('UserController', function ($scope,$http) { 

     //server call with angular 
     $scope.makeServerCall = function() { 
       var url = '/root/jsp/catalog/xml/getJsp.jsp?PatientId=9175; 
       $http({ 
        crossDomain: true, 
        xhrFields: {withCredentials: false}, 
        headers: {'Accept': 'application/json','Content-Type': 'application/json'}, 
        method: 'GET', 
        url: url 
       }).then(function(response) { 
        console.log("Success: "+JSON.stringify(response)); 
       },function(response) { 
        console.log("Error: "+JSON.stringify(response)); 
       }); 
     }; 
    } 

И убедитесь, что на вашей стороне сервера вы можете получить доступ к перекрестному домену reuqest. Допустим, что я использую Spring MVC, поэтому я добавил один фильтр и настроил запрос перекрестного домена, чтобы разрешить следующее. Если вы используете какой-либо другой язык, скажем PHP, тогда вам нужно установить ответ header.You можете искать то же самое.

Мой фильтр сервера Spring MVC

@Component 
public class EcwCORSFilter implements Filter { 

     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
       HttpServletResponse response = (HttpServletResponse) res; 
       response.setHeader("Access-Control-Allow-Origin", "*"); 
       response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
       response.setHeader("Access-Control-Max-Age", "3600"); 
       response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With,isAjaxRequest"); 
       chain.doFilter(req, res); 
     } 

     public void init(FilterConfig filterConfig) { 
     } 

     public void destroy() { 
     } 

} 
Смежные вопросы