Firefox JS XMLHttpRequest请求不执行NodeJS GET函数

时间:2019-06-22 03:23:00

标签: javascript node.js firefox xmlhttprequest

我编写了一个函数,使用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请求中的某些内容,并自动发送响应而不执行任何代码。

0 个答案:

没有答案