我编写了一个函数,使用XMLHttpRequest将GET请求触发到后端。到目前为止,我一直在使用Chrome进行测试,并且一切正常。但是,现在我已经在Firefox中尝试过了,它无法按预期工作。
应该发生的是,一旦触发此GET请求,后端将进行一些处理并以某些状态字符串值(即成功,错误等)响应客户端。然后,我在客户端应用程序中以这种状态进行操作。
在Chrome中,我得到了正确的响应,并且后端按预期运行。使用Firefox,一旦触发此GET请求,后端响应302转发到主页“ /”。它不使用状态字符串响应,它返回主页的html。这很可能是由于302 ...
这是我的XMLHttpRequest代码:
<script>
var HttpClient = function() {
this.get = function(aUrl, cbk) {
var HttpReq = new XMLHttpRequest();
HttpReq.open( "GET", path, true );
HttpReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
HttpReq.onreadystatechange = function() {
if (HttpReq.readyState == 4 && HttpReq.status == 200)
cbk(HttpReq.responseText);
}
HttpReq.send( null );
}
}
var httpClient = newHttpClient();
httpClient.get('/someURLPath', function(res) {
// Do something with the response.
}
</script>
我在网上阅读,看来Firefox处理XMLHttpRequest的方式有所不同,并且它需要一定的权限,以便后端不会自动重定向。这就是为什么我添加了setRequestHeader('X-Requested-With', 'XMLHttpRequest')
,但似乎没有任何作用。
有什么想法我在这里做错了吗?谢谢!
编辑我也尝试将以下内容添加到我的后端nodejs中,没有运气,似乎也无法解决问题...
app.use(function(req, res ,next){
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
EDIT#2 ,所以我弄清楚了为什么它重定向到主页“ /”。我的nodejs应用程序中包含以下内容:
router.get('/someURLPath', checkOrder, async function(req, res, next){...});
function checkOrder(req, res, next) {
if(checkOrder === 'OK') { return next(); }
else res.redirect('/'); // <<-----------WHERE IT REDIRECTS TO HOME
}
因此,似乎没有执行router.get
中的代码,而是直接使用了checkOrder函数,没有看到将checkOrder设置为OK(此处理在router.get中进行,但没有得到处理)执行)并将其重定向到首页“ /”。这就是为什么我的客户端应用程序在HttpReq.responseText
中获得主页的HTML代码的原因。
那么为什么要跳过router.get中的所有代码?好像服务器不喜欢XMLHttpRequest GET请求中的某些内容,并自动发送响应而不执行任何代码。