【发布时间】:2015-07-11 02:57:41
【问题描述】:
例如,我目前正在实现客户端 javascript,如果附加参数超过 IE 对 GET HTTP 请求的 2048ish 字符的安全限制,它将使用 POST,而是以 JSON 格式将参数附加到正文。我的代码类似于以下内容:
var URL = RESOURCE + "?param1=" + param1 + "¶m2=" + param2 + "¶m3=" + param3();
if(URL.length>=2048) {
// Use POST method to avoid IE GET character limit
URL = RESOURCE;
var dataToSend = {"param3":param3, "param1":param1, "param2":param2};
var jsonDataToSend = JSON.stringify(dataToSend);
$.ajax({
type: "POST",
data: jsonDataToSend,
dataType: 'json',
url: URL,
async: true,
error: function() {
alert("POST error");
},
success: function(data) {
alert("POST success");
}
});
}else{
// Use GET
$.ajax({
type: "GET",
dataType: 'json',
url: URL,
async: true,
error: function() {
alert("GET error");
},
success: function(data) {
alert("GET success");
}
});
}
有没有办法避免写出这个 ajax 两次?类似的东西
if(URL.length>=2048) {
// Use POST instead of get, attach data as JSON to body, don't attach the query parameters to the URL
}
注意我知道使用 POST 而不是 GET 来检索数据违反了 REST 的某些原则,但由于 IE 的限制,这是我能找到的最好的解决方法。也感谢处理这种情况的替代建议。
【问题讨论】:
-
什么数据导致您的 GET 请求超过 2048 个字符?如果您期望输入的大小,它绝对应该是一个 POST 请求。但是要回答这个问题,只需将
$.ajax提取到另一个函数 -
通过此调用请求根据用户浏览器设置的区域设置更改的多语言数据。大约有 4.4k 个字符
-
data 仍然含糊不清。图片?文本?数据 URI? 4.4k 个字符是 很多 文本数据,绝对太多,无法注入 URL
-
文本,现在被附加到 POST 的正文中(令人惊讶的是,IE 实际上并没有抱怨 4.4k 字符的 URL。一切仍然按预期工作。但是对 POST 的重构发生了,因为数字可能会在遥远的将来扩大,我们不希望它在那时打破。)
标签: javascript jquery ajax http duplication