gpt4 book ai didi

javascript - 如何使用 jqGrid 发送凭据?

转载 作者:行者123 更新时间:2023-12-03 10:42:57 26 4
gpt4 key购买 nike

我有一项配置为支持 CORS 的服务。通常,当我发出服务器请求时,我通过 jQuery 准备一个请求对象,并将 withCredentials 参数设置为 true,它工作正常.

但是我有一个带有服务器分页的 jqGrid,并且我无法完全管理 xhr 对象。我添加了 loadBeforeSend 事件,在其中添加了一些 header 并正确发送到服务器。

我也看过这篇文章(与 jQuery ajax 请求相关):possible answer 。我尝试通过以下方式将 withCredentials 属性添加到 xhr 对象:

$('#grid').jqGrid({
loadBeforeSend: function (jqXHR, settings) {
jqXHR.setRequestHeader('Accept-Language', 'en-US');
jqXHR.setRequestHeader('SiteApplication', '1');

jqXHR.withCredentials = true;
}
});

甚至通过这种方式:

$('#grid').jqGrid({
loadBeforeSend: function (jqXHR, settings) {
jqXHR.setRequestHeader('Accept-Language', 'en-US');
jqXHR.setRequestHeader('SiteApplication', '1');

jqXHR.xhrFields = {
withCredentials: true
}
}
});

与帖子中解释的解决方案类似。但这没有用。

知道如何将 cookie 发送到服务器吗?

最佳答案

深入研究 jQueryjqGrid 源代码后,我在代码内部的 jQuery.ajaxTransport 函数中看到了这一点, jQuery 创建一个 native XMLHttpRequest javascript 对象。该对象是由上述函数内的本地对象(称为“s”)创建的。

此后,该对象有一个名为“xhrFields”的属性,该属性向标准 xhr 对象动态添加新字段。在此级别调试代码后,我意识到在 jqGridloadBeforeSend 事件中收到的“settings”参数与创建请求对象的对象“s”相同。

总而言之,我修改了代码,将“xhrFields”属性添加到“settings”参数中,并且它正在工作。我的解决方案如下所示:

$('#grid').jqGrid({
loadBeforeSend: function (jqXHR, settings) {
jqXHR.setRequestHeader('Accept-Language', 'en-US');
jqXHR.setRequestHeader('SiteApplication', '1');

settings.xhrFields = {
withCredentials: true
}
}
});

通过这种方式,服务器请求将用户凭据(cookie)正确发送到服务器,我很高兴避免使用其他解决方案,例如使用 cookie 添加自定义 header ,就像我在其他帖子中看到的那样。

更新: @Oleg 针对我的问题发布了更好的解决方案。尽管我的答案有效并且可以帮助任何遇到类似问题的人,但对于这种特定情况(我认为)修改 ajaxGridOptions 将 'xhrFields' 属性添加到此属性更为优雅。

所以代码将是这样的(非常概括,我在创建时省略了网格的其余属性):

$('#grid').jqGrid({
loadBeforeSend: function (jqXHR, settings) {
jqXHR.setRequestHeader('Accept-Language', 'en-US');
jqXHR.setRequestHeader('SiteApplication', '1');
},

ajaxGridOptions: {
xhrFields: {
withCredentials: true
}
}
});

我意识到不需要 crossDomain: true

关于javascript - 如何使用 jqGrid 发送凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28695727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com