我有一个服务器端数据加载的数据表,一切都很好。现在,我想通过来自AWS SQS的侦听通知更新数据行,当我获得新的行数据并添加到表API然后调用“draw”方法时,API会从服务器端触发ajax刷新(表格)是通过服务器处理设置的。)
有一种方法可以暂时禁用ajax调用吗?因为,我不想一直禁用,我希望服务器端处理分页和搜索,只想添加我的新行而不调用服务器。
我试试这个:
var table = $('#tblModel').DataTable(); // Get the API object
// Initialize the Amazon Cognito credentials provider
AWS.config.region = 'us-west-2'; // Region
/**
* Gets the user's Identity
*/
$.getJSON("/cognito", function(data) {
if (data) {
IdentityId = data.IdentityId;
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: IdentityPoolId,
IdentityId: data.IdentityId,
Logins: {
"cognito-identity.amazonaws.com": data.Token
}
});
var queue = new AWS.SQS({params: {QueueUrl: QueueUrl, WaitTimeSeconds: 20}}); // using url to queue
getMessages(queue);
}
});
/**
* Gets the message from SQS
*/
function getMessages(queue) {
queue.receiveMessage(function (err, data) {
if (data) {
if (data.Messages.length == 0) return;
try {
// here add a row or rows, but it trigger a call to refresh data from server side instead.
if (data.Messages.length > 1)
table.rows.add(data.Messages.map(transformMessage)).draw();
else
table.row.add(transformMessage(data.Messages[0])).draw();
// now delete the messages
queue.deleteMessageBatch({
QueueUrl: QueueUrl,
Entries: data.Messages.map(function(Message) {
return {
Id: Message.MessageId,
ReceiptHandle: Message.ReceiptHandle
};
})
}, function(err, data) {
if (err) console.error(err);
});
getMessages(queue);
} catch (e) {
console.error(e);
}
}
});
}
答案 0 :(得分:5)
我得到解决方案,如果有人想要它:如果你想要临时禁用ajax请求必须设置两个设置标志:oFeatures.bServerSide和ajax。
file -i *