全局$ .ajaxSetup()调用不影响单独函数中的$ .ajax()调用?

时间:2014-01-02 16:47:57

标签: javascript ajax jquery

有没有办法让$ .ajaxSetup()的范围扩展到函数体?我无法获得$ .ajaxSetup()来影响函数中的$ .ajax()调用。这是一个例子:

使用以下代码,函数foo()发送的ajax请求不包含ajaxSetup中指定的testHeader:

$.ajaxSetup({
    headers: {
        testHeader: testValue
    }
});
function foo(theData) {
    $.ajax({
        url: testUrl,
        data: theData,
        type: 'POST',
        contentType: 'application/json',
        dataType: 'json'
    });
}

但是,使用以下代码,testHeader确实包含在foo()发送的ajax请求中。

function foo(theData) {
    $.ajaxSetup({
        headers: {
            testHeader: testValue
        }
    });
    $.ajax({
        url: testUrl,
        data: theData,
        type: 'POST',
        contentType: 'application/json',
        dataType: 'json'
    });
}

我认为ajaxSetup()应该是全局的,其范围应扩展到函数体。我错过了什么?感谢。

2 个答案:

答案 0 :(得分:2)

“全球”可能是用词不当。

$ .ajaxSetup只会影响当前的jQuery对象。如果您在另一个页面中加载jQuery,它将不会受到影响。

答案 1 :(得分:1)

好吧,我认为问题是$ .ajaxSetup()是函数调用,而不是变量。所以当调用foo()时,$ .ajaxSetup()还没有被调用。以下是我如何工作:将$ .ajaxSetup()放入$(function(){})调用中:

$(function () {
    $.ajaxSetup({
        headers: {
            testHeader: testValue
        }
    });
});

然后foo()中的ajax请求将根据需要包含testHeader。不确定这是否是最佳解决方案,但它对我有用。