jQuery Ajax:header和beforeSend之间的区别

7

我在阅读有关如何设置头部信息的文档时发现,有两种方式可以实现,一种是通过方法,另一种是直接传递一个包含值的头部对象。它们之间有什么区别呢?

beforeSend方法:

$.ajax({
    cache: false,
    type: "GET",
    url: "/",
    beforeSend: function(xhr) {
        xhr.setRequestHeader('x-access-token', token);
    },
    success: function(data) {
         //Do something
    },
    error: function(data) {
        //Do something
    }
});

头部信息

$.ajax({
    cache: false,
    type: "GET",
    url: "/",
    headers: {
        'x-access-token': token
    },
    success: function(data) {
        //Do something
    },
    error: function(data) {
        //Do something
    }
});
1个回答

7

查看文档,从中可以看出唯一的真正区别(除了headers更简洁和声明性之外)是beforeSend可以覆盖headers中的值。从headers部分可以看出:

头设置中的值也可以在beforeSend函数内被覆盖。

beforeSendheaders还要老,它是在v1.5之前添加的(我假设beforeSend在v1.5之前就存在,因为它有一个关于行为如何改变的注释)。


谢谢。这份文档可能会有点令人困惑。大多数谷歌搜索结果都说要使用beforesend,但我对它的抱怨是我无法将动态标头传递给它,所以我想知道它们之间的区别。 - Darkrum
@Darkrum:为什么你不能将动态头信息传递给 beforeSend - T.J. Crowder
你会怎么做呢?需要使用函数工厂吗?我不熟悉如何实现这个。我想要做的就是在我的代码中只有一个ajax函数,可以被所有其他函数使用来进行调用并传递动态值,我知道如何使用headers对象来完成它,但如何使用beforesend呢? - Darkrum
@Darkrum:在这种情况下,您需要让您的函数接受一个回调函数,beforeSend 调用它。 - T.J. Crowder
是的,这正是我想的。我将坚持使用头对象,因为它似乎更简单,可以从调用函数作为参数传递,并让ajax在成功时回调数据到调用函数,并让它处理数据的操作,而不是让一堆只用于获取数据的ajax调用混乱地执行业务逻辑 耸耸肩 - Darkrum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接