jQuery ajaxSetup - 我想仅为GET请求添加默认数据

时间:2011-08-09 13:35:20

标签: jquery ajax rest

在ajax驱动的网站中,我使用ajaxSetup添加了一些默认数据,ala:

var revision = '159';
$.ajaxSetup({
    dataType: "text json",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data: {
        r: revision
    }
});

这是为了确保在部署新修订时前端缓存未命中,并且前端从后端请求html模板或json数据。由于这个原因,后端和前端共享相同的修订号。

问题是后端在前端执行PUT,POST或DELETE时获取参数'r'有点不高兴。有没有办法告诉jQuery的ajax这个数据只应该在执行GET请求时使用,而不是在执行POST,PUT或DELETE请求时使用。

更新

我首先尝试了beforeSend函数,因为我知道它。但是,更改settings.data是可能的,但是当beforeSend返回时,任何更改似乎都会消失。这可能是我的错......: - )

我已经选择了ajaxPreFilter。虽然这并不容易。 options.data不是一个对象,而是$ .param(object)的结果,所以第一个挑战是取消参数化它。我最终得到了这个:

var revision = '159';
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    // do not send data for POST/PUT/DELETE
    if (originalOptions.type !== 'GET' || options.type !== 'GET') {
        return;
    }

    var data = originalOptions.data;
    if (originalOptions.data !== undefined) {
        if (Object.prototype.toString.call(originalOptions.data) === '[object String]') {
            data = $.deparam(originalOptions.data); // see http://benalman.com/code/projects/jquery-bbq/examples/deparam/
        }
    } else {
        data = {};
    }

    options.data = $.param($.extend(data, { r: revision }));
});

2 个答案:

答案 0 :(得分:31)

启动jQuery 1.5,您可以通过Prefilters更优雅地处理这个问题:

var revision = '159';
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    // do not send data for POST/PUT/DELETE
    if(originalOptions.type !== 'GET' || options.type !== 'GET') {
        return;
    }

    options.data = $.extend(originalOptions.data, { r: revision });
});

答案 1 :(得分:11)

我认为您可以使用的是beforeSend

var revision = '159';
$.ajaxSetup({
    dataType: "json",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    beforeSend: function(jqXHR, settings) {
        if(settings.type == "GET")
            settings.data = $.extend(settings.data, { ... });
        return true;
    }
});

jqXHR documentation

BeforeSend documentation as well as your settings available

我把这个盲目编码,所以我希望它能让你朝着正确的方向前进。