临时禁用数据表上的服务器处理

时间:2016-11-09 15:30:31

标签: jquery ajax server datatables

我有一个服务器端数据加载的数据表,一切都很好。现在,我想通过来自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);
            }
        }
    });
}

1 个答案:

答案 0 :(得分:5)

我得到解决方案,如果有人想要它:如果你想要临时禁用ajax请求必须设置两个设置标志:oFeatures.bServerSide和ajax。

file -i *