我正在使用下面的代码制作标准的ajax请求
let x = new XMLHttpRequest();
x.onload = function(event) { …};
x.open("GET", url, true);
x.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
x.send();
问题在于,由于某些原因我无法理解,会发出两个ajax请求。第一个是OPTIONS请求,第二个是我真正想要的GET请求。知道为什么吗?
我的服务器是一个nodejs应用程序,我开始使用nodemon
,如果它感觉index.js
已经改变,它将重新启动服务器(当你不想停止时,这有助于开发重启服务器)。通过此OPTIONS业务,nodemon
认为我的index.js
已更改并重新启动nodejs
。
此外,OPTIONS请求导致成功请求返回http 200.但是,首先没有任何内容返回到发起该ajax请求的网页(这可能是在OPTIONS请求之后立即执行的,{{1由nodejs
重新启动。然后重复GET请求,也是200,网页得到结果
答案 0 :(得分:1)
问题在于,由于某种原因,我无法理解,会发出两个ajax请求。第一个是OPTIONS请求,第二个是我真正想要的GET请求。知道为什么吗?
因为您正在进行跨域调用(例如,从http://localhost
到http://localhost:someport
),这通常是Same Origin Policy禁止的。因此,浏览器发送“飞行前”OPTIONS请求,以查看服务器是否希望通过Cross-Origin Resource Sharing允许通话。