我正在尝试使用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
}
})
答案 0 :(得分:3)
您正在做的是使用HTTP 302重定向对POST请求的响应。只有在请求很简单时才允许这样做。但是,由于OPTIONS请求是从iOS生成的,因此您将无法执行此类重定向。
原因是根据CORS规范,不允许所有类型的HTTP重定向(301,302,303,307或308)进行预检请求,并且会导致网络错误。
我建议完全删除重定向,并在身份验证过程结束后再次调用服务器。