Ajax GET请求适用于Chrome,但不适用于Firefox或Safari

时间:2017-09-14 07:22:51

标签: html ajax http express

以下代码在Chrome中运行良好。此get的路由将reportOrder输出到终端。 (这不是最终目标,而只是用于测试以确保正确接收数据)。如果请求是在Chrome中进行的,则服务器会收到字符串化的JSON并将其打印到终端。如果请求是在Safari或Firefox中发出的,则服务器会返回404错误。

if(formready){
       document.getElementById("invalidform").innerHTML = "";
       var xhttp = new XMLHttpRequest();
       xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {

                };
                console.log(this.status);
            };
        xhttp.open("GET", "/submit/"+JSON.stringify(reportOrder), true);
        xhttp.send();
    }
    else{
        document.getElementById("invalidform").innerHTML = "<p style='color: red'>Oops! Please correct all fields marked in red.</p>";
    }

我已经阅读了一些关于ajax请求在不同浏览器中看起来很挑剔但却不明白为什么服务器会返回404的事情。

以防这是有用的路线:

app.get("/submit/:data", function(req, res){
   var rawFormData = req.params.data;
   var formData = JSON.parse(rawFormData);
   console.log(formData);
});

2 个答案:

答案 0 :(得分:0)

您需要获取请求网址的完整路径。

答案 1 :(得分:0)

要在GET URL中传递参数,最好使用参数格式进行序列化,例如使用jQuery.param(...)(别名:$.param(...))。 OP提到&#34;当我使用jQuery.param时,GET请求在所有浏览器上都会通过。&#34;

要读取服务器端的参数,不必编写自定义解析器。 Express已经解析了它们并公开为req.query

例如,如果将GET请求发送到URL /submit?a=42&b=88,那么在服务器端req.query中将是包含属性ab的对象:

app.get('/submit', function(req, res) {
  console.log(req.query); // { a: '42', b: '88' }
  res.status(200).end();
});