例如,我正在实现客户端javascript,如果附加参数超过IE对GET HTTP请求的2048个字符的安全限制,将使用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
}
N.b。我知道使用POST而不是GET来检索数据违反了REST的某些原则,但由于IE的限制,这是我能够找到的最好的工作。处理这种情况的替代建议也值得赞赏。
答案 0 :(得分:1)
jQuery的$.ajax
方法获取具有属性的对象。所以很容易,生成该对象和“标准设置”并根据某些逻辑修改它们,最后通过ajax调用将其传递给一个loc。
原理:
var myAjaxSettings = {
type: "POST",
data: jsonDataToSend,
dataType: 'json',
url: URL,
async: true,
error: function() {
alert("POST error");
},
success: function(data) {
alert("POST success");
}
}
if ( <condition a> )
myAjaxSettings.type = "GET";
if ( <condition b> )
myAjaxSettings.success = function (data) { ...make something different ... };
$.ajax(myAjaxSettings);