2016-11-09 69 views
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); 
      } 
     } 
    }); 
} 
+0

難道你不能只用一個'boolean'變量來存儲你是否應該執行ajax嗎?然後設置'boolean'來打開或關閉ajax,並在運行ajax的函數中檢查'boolean'。 –

+0

@KevinWorkman,這似乎是答案恕我直言 –

+0

@KevinWorkman我不THIK如此,是因爲在數據表中的AJAX功能是激活設置: $(「#tblModel」)的dataTable({ AJAX:「/路徑/ to/data「, .... }); 它必須是這樣的頁面渲染才能獲取數據。所以,這不是那麼容易我認爲 –

回答

2

我得到的解決方案,如果有人希望它:如果你想暫時禁用Ajax請求必須設設置兩個標誌:oFeatures.bServerSide和Ajax。

// here temporary disable ajax 
table.settings()[0].oFeatures.bServerSide = false; 
table.settings()[0].ajax = false; 

if (data.Messages.length > 1) 
    table.rows.add(data.Messages.map(transformMessage)).draw(); 
else 
    table.row.add(transformMessage(data.Messages[0])).draw(); 

// here activate it again 
table.settings()[0].oFeatures.bServerSide = true; 
table.settings()[0].ajax = sUrlServerList; 
+0

我有這個解決方案的一些「邏輯問題」,它禁用表,但它也重置有關分頁信息。 –