$ Http.post от Angular не работает, как и $http..., но jQuerys ajax работает. Зачем?
По какой-то причине это:
return jquery.ajax('my url', {
crossDomain : true
, data : JSON.stringify({"brand": self.current})
, type : 'POST'
}).success(function(data){
scope.results = data;
});
и / или это:
curl -X POST -H "Content-Type: application/json" -d '{"brand":"target"}' myUrl
отлично работает, но это:
var req = {
method: "POST"
, url : "my url"
, data : JSON.stringify({"brand": self.current})
};
return $http(req).
success(function(data){
scope.results = data;
});
неудачно с
"ОПЦИИ мой url (анонимная функция) @ angular.js: 9866sendReq @ angular.js: 9667 $ get.serverRequest @ angular.js: 9383processQueue @ angular.js: 13248 (анонимная функция) @ angular.js: 13264 $ get.Scope. $ eval @ angular.js: 14466 $ get.Scope. $ digest @ angular.js: 14282 $ get.Scope. $ apply @ angular.js: 14571 (анонимная функция) @ angular.js: 21571jQuery.event.dispatch @ jquery.js: 4430jQuery.event.add.elemData.handle @ jquery.js: 4116
(индекс): 1 XMLHttpRequest не может загрузить мой URL. В запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Источник ' http://localhost:5000/ ', следовательно, не имеет доступа. Ответ имеет HTTP-код состояния 404. "
Это один и тот же URL. Wtf. У меня есть подлое подозрение, что опция "crossDomain: true" в jquery - это то, почему jquery один работает, но если это так, то вопрос таков:
как мне сделать это с угловым?
- При использовании jjery-метода ajax по умолчанию область не обновляется с результатами, но я знаю, что данные назначаются, потому что я выхожу из системы, и если я снова отправляю запрос, область обновляется со второй значение.
Второй вопрос - почему мой взгляд не обновляется с результатами?
Обновить:
Причина, по которой это не помогло, не имеет ничего общего с ответом, который я получаю от сервера, проблема в том, что Angular преобразует этот запрос POST в запрос OPTIONS: (взят из инструмента xhr Google chromes:)
Remote Address: the remote address
Request URL:the request endpoint
Request Method:OPTIONS <-------------
Status Code:404 Not Found
Дальнейшая проверка показывает:
OPTIONS /my url HTTP/1.1 <--------------
Host: my urls host
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: http://localhost:5000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Access-Control-Request-Headers: accept, charset, content-type
Accept: */*
Referer: http://localhost:5000/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
это не то, что нужно делать, потому что я специально говорю в объекте req, что передаю $ http, что это запрос POST.
...
Так как мне сделать угловой... НЕ так?
Кроме того, почему он это делает?
1 ответ
Когда вы выполняете запрос перекрестного происхождения из своего браузера, все браузеры нажимают на URL-адрес (предоставленный в вызове AJAX), чтобы подтвердить, доступен ли запрос перекрестного происхождения или нет, который известен как предварительный запрос. https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
Таким образом, конечная точка вашего сервера должна разрешить предварительный запрос, чтобы этот вызов работал, установив некоторые заголовки ответа, такие как (пример в Groovy):
response.setHeader "Access-Control-Allow-Headers", "Content-Type"
response.setHeader "Access-Control-Allow-Methods", "POST,DELETE,PUT"
response.setHeader "Access-Control-Allow-Origin", "*"