【问题标题】:Ajax GET request works on Chrome but not Firefox or SafariAjax GET 请求适用于 Chrome,但不适用于 Firefox 或 Safari
【发布时间】:2017-09-15 17:48:47
【问题描述】:

以下代码在 Chrome 中运行良好。此获取的路线将 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);
});

【问题讨论】:

  • 您能否提供一个导致404reportOrder 的示例?另外,要在GET URL中传递参数,最好使用参数格式进行序列化,比如使用jQuery.param(...)
  • 三思而后行。我认为你是对的,它与正在传递的字符串有关。我仍然不完全理解为什么这会使每个浏览器都不同,除非每个浏览器都以某种方式发送与 Chrome 不同的字符串。
  • 你能打开 Firefox 或 Safari 的调试器并检查 GET 请求中的 URL 是什么吗?也许您的 Firefox/Safari 中有一些策略会自动更改 URL。
  • 因此,Chrome 似乎会自动将转义字符放入 url。 stringify 函数只是删除空格。 Safari 和 Firefox 根据调试器获取请求按原样发送。另一方面,Chrome 会添加转义字符。
  • 好的。看来您需要手动转义字符,然后将它们连接到 URL 中?

标签: html ajax http express


【解决方案1】:

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

要在服务器端读取参数,无需编写自定义解析器。 Express 已经解析了它们并暴露为req.query

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 为什么它在没有完整路径的情况下在 Chrome 中工作?我添加了完整路径,它在 Chrome 中有效,但在 Safari 或 Firefox 中仍然无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    相关资源
    最近更新 更多