AngularJS $ http.post返回状态0

时间:2016-09-08 07:14:32

标签: javascript angularjs ionic-framework http-headers

我正致力于Ionic框架的角度js。当我请求数据时,它总是返回状态0作为错误。我认为问题是HTTP访问控制(CORS)。但我已将 Access-Control-Allow-Origin设置为* 。我还需要做些什么?请帮忙。谢谢。

Angular JS Code

var params = {
         limit: 5,
          page: 1
       };

$http.post('https://www.example.com/getdata.php', { params: params })
.success(function (data,status) {                        
        console.log("Conection available . Status s" + status);                         
})
.error(function (data, status, headers, config) {
        console.log("Error Status " + status);
});

返回标题

Access-Control-Allow-Origin → *
Access-Control-Request-Headers → *
Access-Control-Request-Method → POST
Cache-Control → max-age=2592000
Connection → Keep-Alive
Content-Length → 1933
Content-Type → application/json
Date → Thu, 08 Sep 2016 06:47:31 GMT
Expires → Sat, 08 Oct 2016 06:47:31 GMT
Keep-Alive → timeout=5, max=100
Server → Apache/2.4.20 (Ubuntu)

更新

所以浏览器日志中的实际错误代码是

XMLHttpRequest无法加载https://www.example.com/getdata.php。请求标题字段在预检响应中,Access-Control-Allow-Headers不允许使用Content-Type。

我尝试更新Access-Control-Allow-Headers标头,如下所示。

 $http.post('https://www.example.com/getdata.php',
                        { params: params },
                        { 'Access-Control-Allow-Headers': 'application/json' })

并更新了响应标头,如下所示。

Access-Control-Allow-Headerss → application/json
Access-Control-Allow-Origin → *
Access-Control-Request-Headers → *
Access-Control-Request-Method → POST
Cache-Control → max-age=2592000
Connection → Keep-Alive
Content-Length → 1933
Content-Type → application/json
Date → Thu, 08 Sep 2016 07:22:03 GMT
Expires → Sat, 08 Oct 2016 07:22:03 GMT
Keep-Alive → timeout=5, max=100
Server → Apache/2.4.20 (Ubuntu)

但仍然没有运气。请帮忙。

2 个答案:

答案 0 :(得分:2)

  

请求标题字段预检响应中的Access-Control-Allow-Headers不允许使用Content-Type

Access-Control-Allow-Headers不支持通配符。您正在使用*,但必须明确指定允许的标头。

  

我尝试更新Access-Control-Allow-Headers标头,如下所示。

Access-Control-Allow-Headers是一个响应标头。您必须在服务器上设置它,而不是在客户端上。

您的客户端JavaScript不允许自己阅读其他人的数据。这将使得获得许可毫无意义的要求。

答案 1 :(得分:0)

尝试将域名完全放在Access-Control-Allow-Origin中,我也看到了同样的问题 并将cordova的白名单插件添加到您的项目中

对于Android模拟器,请使用10.0.2.2