Я ищу способ создать простую HTML-таблицу, которая может обновляться в реальном времени при изменении базы данных; в частности, добавлена новая запись.
Другими словами, воспринимайте это как административную панель управления. Если сделана продажа и в базу данных (MySQL в моем случае) добавлена новая строка, тогда веб-страница должна «обновить» таблицу новой строкой.
Я видел некоторую информацию о новом использовании EVENT GATEWAY
, но во всех примерах Coldfusion используется как «толкатель», а не «потребитель». Я хотел бы, чтобы Coldfusion обновлял / отправлял событие на шлюз, а также потреблял ответ.
Если это можно сделать с помощью комбинации AJAX и CF, пожалуйста, дайте мне знать!
Я просто хочу понять, с чего начать обновление в реальном времени.
Заранее спасибо !!
РЕДАКТИРОВАТЬ / Объяснение выбранного ответа:
В итоге я выбрал @ bpeterson76's ответ, потому что на данный момент это было проще всего реализовать в небольших масштабах. Мне очень нравится его предложение Datatables, и это то, что я использую для обновления, близкого к реальному времени.
Хотя мой сайт становится больше (надеюсь), я не уверен, будет ли это масштабируемое решение, поскольку каждый пользователь попадать на страницу "слушателя", а затем запрашивать мою БД. Мой запрос относительно прост, но я все еще беспокоюсь о производительности в будущем.
Однако, на мой взгляд, поскольку HTML5 начинает становиться веб-стандартом, метод веб-сокетов, предложенный @iKnowKungFoo, скорее всего, является лучшим подходом. Комета с длинным опросом - тоже отличная идея, но она немного громоздка для реализации / также, похоже, имеет некоторые проблемы с масштабированием.
Итак, будем надеяться, что веб-пользователи начнут внедрять более современные браузеры, поддерживающие HTML5, потому что веб-сокеты - это относительно простой и масштабируемый способ приблизиться к реальному времени.
Если вы считаете, что я принял неправильное решение, оставьте комментарий.
Наконец, вот исходный код всего этого:
Javascript:
обратите внимание, это очень простая реализация. Он только смотрит, изменилось ли количество записей в текущей таблице данных, и если да, то обновите таблицу и выдайте предупреждение. Производственный код намного длиннее и сложнее. Это просто показывает простой способ приблизиться к обновлению в реальном времени.
<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's 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>