1
我有一個數據表加載服務器端數據,一切都可以這樣做。現在,我希望通過來自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);
}
}
});
}
難道你不能只用一個'boolean'變量來存儲你是否應該執行ajax嗎?然後設置'boolean'來打開或關閉ajax,並在運行ajax的函數中檢查'boolean'。 –
@KevinWorkman,這似乎是答案恕我直言 –
@KevinWorkman我不THIK如此,是因爲在數據表中的AJAX功能是激活設置: $(「#tblModel」)的dataTable({ AJAX:「/路徑/ to/data「, .... }); 它必須是這樣的頁面渲染才能獲取數據。所以,這不是那麼容易我認爲 –