iOS CORS ajax请求readyState 0

时间:2016-01-22 20:26:44

标签: javascript jquery ajax node.js cors

我正在尝试使用AJAX从我的iPhone进行CORS登录$.ajax调用,但是使用此fail对象状态失败(到达jqXHR回调):

{ 
 readyState: 0,
 status: 0,
 statusText: "error"
}

PC上运行正常,请求成功。

iOS上,即使请求失败,如果我刷新页面并在服务器上( Node.js ),我实际上已经记录了。我可以将其视为成功的登录请求。

不同之处在于,在Chrome桌面版中,POST登录请求会直接重定向到loginOk页面,而来自POST的{​​{1}}请求首先会触发预告航班iOS请求到达OPTIONS页。

Chrome请求(来自Node.js控制台):

loginOk

iOS请求(来自Node.js控制台):

POST /login 302
GET /loginOk 200

CORS请求来自 localhost 到节点服务器 localhost:3000

这是我的POST /login 302 OPTIONS /ok 200 电话:

AJAX

而且,这是我的CORS中间件:

$.ajax({
    type: 'POST',
    url: "http://192.168.1.2:3000/login",
    data: formData,
    crossDomain: true,
    dataType: "json",
    xhrFields: {
        withCredentials: true
    }
})

1 个答案:

答案 0 :(得分:3)

您正在做的是使用HTTP 302重定向对POST请求的响应。只有在请求很简单时才允许这样做。但是,由于OPTIONS请求是从iOS生成的,因此您将无法执行此类重定向。

原因是根据CORS规范,不允许所有类型的HTTP重定向(301,302,303,307或308)进行预检请求,并且会导致网络错误。

我建议完全删除重定向,并在身份验证过程结束后再次调用服务器。