-->

角的$ http.post不工作​​,也没有它的$ HTTP ...但是jQuerys阿贾克斯一样

2019-10-22 17:29发布

出于某种原因,这一点:

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;
});

失败与凄惨

“OPTIONS我的网址(匿名函数)@ 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 $ @消化angular.js:14282个$ get.Scope $ @适用angular.js:14571(匿名函数)@ angular.js:21571jQuery.event.dispatch @的jquery.js:4430jQuery.event.add.elemData.handle @的jquery.js:4116

(指数):1的XMLHttpRequest不能加载我的网址。 没有“访问控制允许来源”标头出现在所请求的资源。 原产地“ 的http://本地主机:5000 ”因此不允许访问。 响应有HTTP状态代码404”


他们是相同的URL。 跆拳道。 我有一个鬼鬼祟祟的怀疑,“跨域:真正的”在jQuery的选项就是为什么jQuery的一个作品,但如果是这样的话,那么问题是:

我该怎么做,与角?

- 当使用jQuery的默认AJAX方法,范围不与结果更新,但我知道数据被分配,因为我记录它,如果我再次提交请求,范围不更新与第二值。

其次question-为什么不是我的结果视图更新?


更新:

这是失败的原因无关,与我越来越从服务器返回的响应,问题是,角度正在改变这个POST请求到一个OPTIONS请求:(从谷歌铬合金XHR工具采取:)

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请求说。

...

那么,如何让我的角度......这样做?

须─它为什么这样做?

Answer 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", "*"


文章来源: Angular's $http.post doesn't work, nor does its' $http… but jQuerys ajax does. Why?