我正在努力设置SyncFusions ej.Grid以在使用API​​获取或更新数据时使用基本身份验证。有人对此有经验吗?他们的examples似乎稀疏。

下面有一些我尝试过的例子。给定以下安装代码:

var ticket = "Basic " + Base64.encode("username:password");

$('#Grid').ejGrid({
    dataSource: dataManager,
    allowPaging: true,
    columns: ["AccountName", "CompanyName"]
});


此代码显示chrome基本身份验证提示:

var dataManager = ej.DataManager({
    url: "/api/app/imports/3",
    adaptor: new ej.WebApiAdaptor()
});


此代码显示chrome基本身份验证提示。

由于在data.min.js中使用了“标头”对象,因此尝试

var dataManager = ej.DataManager({
    url: "/api/app/imports/3",
    adaptor: new ej.WebApiAdaptor(),
    headers: {
        Authorization: ticket
    }
});


此代码错误:未捕获的TypeError:this.adaptor.processQuery不是函数

由于https://www.syncfusion.com/forums/117024/does-datamanager-support-odata-v4而尝试

var dataManager = ej.DataManager({
    url: "/api/app/imports/3",
    adaptor: new ej.WebApiAdaptor().extend({
        beforeSend: function() {
            request.setRequestHeader("Authorization", ticket);
        }
    })
});


此代码显示chrome基本身份验证提示:

var dataManager = ej.DataManager({
    url: "/api/app/imports/3",
    adaptor: new ej.WebApiAdaptor(),
    beforeSend: function() {
        request.setRequestHeader("Authorization", ticket);
    }
});


此代码显示chrome基本身份验证提示:

var dataManager = ej.DataManager({
    url: "/api/app/imports/3",
    adaptor: new ej.WebApiAdaptor()
});

dataManager.dataSource.beforeSend = function() {
    request.setRequestHeader("Authorization", ticket);
}

最佳答案

在对最小代码进行大量调试之后,我发现ej.DataManager构造函数确实接受headers属性,但是需要对象列表,并将每个对象的每个属性用作HTTP标头。因此,以下代码将包含您要查找的标头:

var dataManager = ej.DataManager({
    url: "/api/app/imports/3",
    adaptor: new ej.WebApiAdaptor(),
    headers: [{
        Authorization: ticket
    }]
});

09-18 08:08