是否可以在 AJAX 调用中使用条件来避免重复代码?

Is it possible to use conditions within an AJAX call to avoid duplicate code?

例如,我目前正在实现客户端 javascript,如果附加参数超过 IE 对 GET HTTP 请求的 2048ish 字符的安全限制,它将使用 POST,而是附加参数到 JSON 格式的正文。我的代码类似于以下内容:

var URL = RESOURCE + "?param1=" + param1 + "&param2=" + param2 + "&param3=" + 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 的限制,这是我能够找到的最好的解决方法。处理这种情况的替代建议也很受欢迎。

jQuery 的$.ajax 方法获取具有属性的对象。因此,首先生成该对象和一个 "standard setting" 并根据特定逻辑修改它们并最终通过 ajax 调用将其传递给一个位置非常容易。

原理:

 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);