2014-11-27 2 views
0

У меня есть проблема с этим вопросом. Кажется, что это нормальное поведение, так как я пытаюсь сделать запрос на межсайтовый сайт. Я создал свой WebService на основе всего, что я прочитал круглый здесь:AngularJs отправляет ВАРИАНТ вместо запроса POST

<WebMethod()> _ 
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml, UseHttpGet:=False)> _ 
Public Function Test() As String 
    Me.Context.Response.Clear() 
    Me.Context.Response.AddHeader("Access-Control-Allow-Origin", "*") 
    Me.Context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type") 
    Me.Context.Response.ContentType = "text/plain" 
    Return "<test>aRetStr</test>" 
End Function 

И это простой angularJS сценарий:

var myModule = angular.module('myModule', []) 

myModule.controller('myController', function($scope, userRepository) { 
    userRepository.getAllUsers().success(function(users) { 
            alert("success"); 
            var myjson = JSON.parse(users); 
            $scope.users = myjson}) 
           .error(function(data, status, headers, config) { 
            alert("error"); 
           }); 
    }); 

myModule.factory('userRepository', function($http) { 
    return { 
     getAllUsers: function() { 
      $http.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; 
      var url = "http://localhost:2693/service.asmx/Test"; 
      var xml = $http.post(url, {test: 'test'}); 
      return xml; 
     } 
    }; 
}); 

X-Requested-With = XMLHttpRequest и Access-Control-Allow-Origin = * и text/plain тоже думает, что предложил тур здесь Безразлично» т работал в моем случае. Действительно, Firebug покажет мне запрос OPTIONS и отсутствие ошибки XSS, но следующий POST никогда не произойдет. Ошибка alert срабатывает, и когда это происходит конфиг в функции обратного вызова выглядеть следующим образом:

Accept : application/json, text/plain, */* 
Content-Type : application/json;charset=utf-8 
X-Requested-With : XMLHttpRequest 
method : POST 

Что я могу сделать, почему ничего не происходит?

+0

, что делает 'status' держать в обратный вызов ошибки? –

+0

'0'. И 'null' в' data'. –

+0

Вы пытались добавить _Access-Control-Allow-Methods_, с помощью которого вы устанавливаете методы, которые вы разрешаете? то есть 'Access-Control-Allow-Methods: POST, GET, OPTIONS' –

ответ

1

Прошу прощения, что ответ не является более полным, но я не полностью знаю вашу базовую технологию.

В основном, ваше приложение «Угловое» выполняет предполетный запрос на ваш сервер из-за CORS, что означает, что сначала он выполняет запрос HTTP.OPTIONS на этом URL-адресе, и после успешного ответа с сервера он сделает HTTP. xxx (в этом случае POST).

Поскольку вы не настроили свой веб-сервис для ответа на HTTP.OPTIONS, и я считаю, что это вызывает вашу ошибку.

Решение для настройки веб-сервиса, чтобы ответить на HTTP.OPTIONS запросы со следующими заголовками:

response: 200, "ok" 
    header 'Access-Control-Allow-Origin': http://yoursite.com 
    header 'Access-Control-Allow-Methods': 'POST, OPTIONS' 

Пожалуйста, смотрите больше о спецификации CORS здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

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