离子http发布到外部网址

时间:2016-07-06 22:05:34

标签: angularjs ionic-framework http-post access-control

我试图使用角度将一个帖子发送到带有Ionic的网址,但我有回复:

  

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:8100”访问。响应的HTTP状态代码为404.

我知道外部服务正在运行,因为我通过ajax进行测试,一切运行正常......

在AngularJS(Ionic)和Ajax中使用的代码下面:

离子性:

var loginServiceUrl = 'http://url.com.br'; //It is not the real one
var loginServiceData = {
    email: email@email.com.br
    senha: 1234
};
$http.post(loginServiceUrl, loginServiceData).
then(function (res){
    console.log(res);
});

的Ajax:

$.ajax({
    type: "POST",
    url : 'http://url.com.br', //It is not the real one
    data : {email: 'email@email.com.br', senha: '1234'},
    success: function(result) {
        $('html').text(JSON.stringify(result));
    }
});

有谁知道为什么我在本地主机上通过ajax获取帖子而不是离子,也是localhost?

3 个答案:

答案 0 :(得分:1)

检查一下。很好地解释了如何处理像你这样的问题 - > http://blog.ionic.io/handling-cors-issues-in-ionic/

答案 1 :(得分:1)

尝试在POST请求中添加标题。

// DataToSend的示例

var video = $('video')[0];
var t = setInterval(function () {
    if(video.readyState > 0) {
        var duration = video.duration;
        console.log(duration);
        clearInterval(t);
    }
}, 500);

答案 2 :(得分:0)

CORS与您的前端无关。

在发送POST请求之前,浏览器会向服务器发送OPTIONS请求,以检查是否允许来自您域的呼叫。

因为,您获得状态404,这意味着您的服务器未处理OPTIONS请求

<强> 1。允许OPTIONS请求(与POST相同)

现在来到第二部分,即#34;对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39; &#34;

在允许OPTIONS请求之后,现在设置OPTIONS请求的响应头(浏览器将检查OPTIONS请求的响应,然后仅当存在&#39; Access-Control-Allow-Origin&#39;时才处理POST请求。出现在OPTIONS的回复中。

<强> 2。设置OPTIONS请求的响应标头

response().setHeader("Access-Control-Allow-Origin", "*");
response().setHeader("Allow", "*");
response().setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent");

实施例.. 的 (在Java中)

路由器:

OPTIONS /*all                         
controllers.Application.preflight(all)

控制器功能:

public static Result preflight(String all) {
        response().setHeader("Access-Control-Allow-Origin", "*");
        response().setHeader("Allow", "*");
        response().setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
        response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent, Auth-Token");
        return ok();
    }

希望这能解决您的问题。

干杯