Я ищу способ создать простую таблицу HTML, которая может быть обновлена в реальном времени при событии изменения базы данных; в частности, добавлена новая запись.
Другими словами, подумайте об этом как о контрольной панели. Если выполняется продажа и добавлена новая строка в базе данных (MySQL в моем случае), веб-страница должна "обновить" таблицу новой строкой.
Я видел некоторую информацию о новом, используя EVENT GATEWAY
, но все примеры используют Coldfusion как "толкатель", а не "потребитель". Я хотел бы, чтобы Coldfusion обновлял/нажимал событие на шлюз, а также потреблял ответ.
Если это можно сделать, используя комбинацию AJAX и CF, пожалуйста, дайте мне знать!
Я действительно просто хочу понять, с чего начать с обновлением в реальном времени.
Спасибо заранее!
EDIT/Объяснение выбранного ответа:
Я закончил с ответом @bpeterson76, потому что на данный момент его было проще всего реализовать в небольших масштабах. Мне очень нравится его предложение Datatables, и это то, что я использую для обновления в реальном времени.
Поскольку мой сайт становится больше (надеюсь), я не уверен, будет ли это масштабируемое решение, так как каждый пользователь будет ударять по странице "слушателя", а затем запрашивать мою БД. Мой запрос относительно прост, но я все еще беспокоюсь о производительности в будущем.
По-моему, хотя HTML5 начинает становиться веб-стандартом, метод Web Sockets, предложенный @iKnowKungFoo, скорее всего, лучший подход. Комета с длинным опросом также является отличной идеей, но она немного громоздка для реализации/также, похоже, имеет некоторые проблемы с масштабированием.
Итак, пусть пользователи веб-сайтов надеются внедрить более современные браузеры, поддерживающие HTML5, потому что Web Sockets - относительно простой и масштабируемый способ приблизиться к реальному времени.
Если вы чувствуете, что я принял неправильное решение, оставьте комментарий.
Наконец, вот несколько исходных кодов для всего:
JavaScript:
заметьте, это очень простая реализация. Он смотрит только на то, изменилось ли количество записей в текущем datatable, и если это так обновить таблицу и вызвать предупреждение. Производственный код намного длиннее и более активен. Это просто показывает простой способ приблизиться к обновлению в реальном времени.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js"></script>
<script type="text/javascript" charset="utf-8">
var originalNumberOfRecsInDatatable = 0;
var oTable;
var setChecker = setInterval(checkIfNewRecordHasBeenAdded,5000); //5 second intervals
function checkIfNewRecordHasBeenAdded() {
//json object to post to CFM page
var postData = {
numberOfRecords: originalNumberOfRecsInDatatable
};
var ajaxResponse = $.ajax({
type: "post",
url: "./tabs/checkIfNewItemIsAvailable.cfm",
contentType: "application/json",
data: JSON.stringify( postData )
})
// When the response comes back, if update is available
//then re-draw the datatable and throw an alert to the user
ajaxResponse.then(
function( apiResponse ){
var obj = jQuery.parseJSON(apiResponse);
if (obj.isUpdateAvail == "Yes")
{
oTable = $('#MY_DATATABLE_ID').dataTable();
oTable.fnDraw(false);
originalNumberOfRecsInDatatable = obj.recordcount;
alert('A new line has been added!');
}
}
);
}
</script>
Coldfusion:
<cfset requestBody = toString( getHttpRequestData().content ) />
<!--- Double-check to make sure it a JSON value. --->
<cfif isJSON( requestBody )>
<cfset deserializedResult = deserializeJSON( requestBody )>
<cfset numberOFRecords = #deserializedResult.originalNumberOfRecsInDatatable#>
<cfquery name="qCount" datasource="#Application.DBdsn#" username="#Application.DBusername#" password="#Application.DBpw#">
SELECT COUNT(ID) as total
FROM myTable
</cfquery>
<cfif #qCount.total# neq #variables.originalNumberOfRecsInDatatable#>
{"isUpdateAvail": "Yes", "recordcount": <cfoutput>#qCount.total#</cfoutput>}
<cfelse>
{"isUpdateAvail": "No"}
</cfif>
</cfif>