获取jquery $ .ajax请求使用的设置

时间:2014-11-30 19:09:58

标签: javascript jquery ajax

我在许多请求中使用$.ajax,每个请求都有不同的设置和值传递给函数。

我需要检查这些设置是否已正确合并到$.ajax设置中。

var options = {
  endpoint: '/path/page'
  method : "POST",
  mode: 'abort',
  data : { value : $(this).val() },
  headers : { 'X-Key' : 'value' }
}

$.ajax( $.extend(true, {
    url: endpoint,
    type: 'GET',
    cache: true,
    dataType: 'json',
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    headers : {
        'X-Same-Domain':'1',
    },
    async: true,
    data: data,
    timeout: 5000,
}, options) )

如何在控制台中查看$ .ajax请求在成功或失败时使用的设置?

3 个答案:

答案 0 :(得分:1)

jQuery似乎不支持这个,但你可以自己实现:

function ajax(options) {
    var defer = $.Deferred();
    $.ajax(options)
        .done(function(data, textStatus, jqXHR) {
            defer.resolve(data, textStatus, jqXHR, options);
        })
        .fail(function(jqXHR, textStatus, errorThrown) {
            defer.reject(jqXHR, textStatus, errorThrown, options);
        });
    return defer.promise();
}

<强>用法

var options = {
    endpoint: '/path/page'
    method : "POST",
    mode: 'abort',
    data : { value : $(this).val() },
    headers : { 'X-Key' : 'value' }
};

ajax($.extend(true, {
    url: endpoint,
    type: 'GET',
    cache: true,
    dataType: 'json',
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    headers : {
        'X-Same-Domain':'1',
    },
    async: true,
    data: data,
    timeout: 5000,
}, options)).done(function(data, textStatus, jqXHR, ajaxOptions) {
    console.log("done", ajaxOptions);
}).fail(function(jqXHR, textStatus, errorThrown, ajaxOptions) {
    console.log("fail", ajaxOptions);
});

答案 1 :(得分:1)

通常情况下,你会做这样的事情:

var defaults = {...};

...

var options = {...};

var ajaxSettings = $.extend(true, {}, defaults, options);
console.log(ajaxSettings);

$.ajax(ajaxSettings).then(function(result) {
    // success handler
    // `ajaxSettings` is still in scope here
}, function(error) {
    // error handler
    // `ajaxSettings` is still in scope here
});

答案 2 :(得分:1)

这个问题很老,但是从现在起它可以以较低的复杂性帮助有需要的人。 可以使用.ajaxSend中的设置来装饰jqxhr,这样它将被传递到发送后jqxhr所在的所有流中。

$(document).ajaxSend(function (event, jqxhr, settings) {
  jqxhr.settings = settings;
});