2016-11-09 8 views
1

私はサーバ側のデータによってロード可能なデータテーブルを持っています。今、AWS SQSからのリスニング通知によってデータ行を更新したいとき、新しい行データを取得してテーブルAPIに追加してから「描画」メソッドを呼び出すと、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

あなたはajaxを実行する必要があるかどうかを格納する 'boolean'変数を使用できませんか?次に、ajaxをオンまたはオフにしたいときに 'boolean'を設定し、ajaxを実行する関数で' boolean'をチェックします。 DataTableにAjaxの機能は、設定にアクティベートされているので、私は、そうthikません答えIMHO –

+0

@KevinWorkman:。 $( '#のtblModelを')のdataTable({ AJAX:「/パス/ to/data "、 .... }); データを取得するには、このようにページをレンダリングする必要があります。だから私は思うのは簡単ではない –

+0

@KevinWorkmanであるように思わ –

答えて

2

を誰かがそれをしたい場合、私は、解決策を得る:oFeatures.bServerSideとAjax:あなたは、一時的な無効化の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

私はこの解決策に「論理的な問題」があり、それはテーブルを無効にするだけでなく、ページネーションに関する情報もリセットします。 –