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