Есть ли какие-либо стандарты или системы обмена сообщениями для AJAX?Стандартная система обмена сообщениями событий с AJAX?
Прямо сейчас у меня есть одна страница, которая загружает контент с помощью Ajax. Поскольку у меня была сложная форма для ввода данных как часть моего контента, мне нужно проверить некоторые события, которые могут произойти в моей форме. Таким образом, после некоторой корректировки ведомых моих тестов:
asyncShould("search customer list click", 3, function() {
stop(1000);
$('#content').show();
var forCustomerList = newCustomerListRequest();
var forShipAndCharge = newShipAndChargeRequest(forCustomerList);
forCustomerList.page = '../../vt/' + forCustomerList.page;
forShipAndCharge.page = 'helpers/helper.php';
forShipAndCharge.data = { 'action': 'shipAndCharge', 'DB': '11001' };
var originalComplete = forShipAndCharge.complete;
forShipAndCharge.complete = function(xhr, status) {
originalComplete(xhr, status);
ok($('#customer_edit').is(":visible"), 'Shows customer editor');
$('#search').click();
ok($('#customer_list').is(":visible"), 'Shows customer list');
ok($('#customer_edit').is(":hidden"), 'Does not show customer editor');
start();
};
testController.getContent(forShipAndCharge);
});
Вот контроллер для получения контента:
getContent: function (request) {
$.ajax({
type: 'GET',
url: request.page,
dataType: 'json',
data: request.data,
async: request.async,
success: request.success,
complete: request.complete
});
},
А вот событие запроса:
function newShipAndChargeRequest(serverRequest) {
var that = {
serverRequest: serverRequest,
page: 'nodes/orders/sc.php',
data: 'customer_id=-1',
complete: errorHandler,
success: function(msg) {
shipAndChargeHandler(msg);
initWhenCustomer(that.serverRequest);
},
async: true
};
return that;
}
И вот успешный обработчик:
function shipAndChargeHandler(msg) {
$('.contentContainer').html(msg.html);
if (msg.status == 'flash') {
flash(msg.flash);
}
}
И на моей стороне сервера я в конечном итоге со структурой JSON, который выглядит следующим образом:
$message['status'] = 'success';
$message['data'] = array();
$message['flash'] = '';
$message['html'] = '';
echo json_encode($message);
Итак, теперь загрузка контента состоит из двух частей:
- HTML, это представление формы.
- DATA, это любые данные, которые должны быть загружены в виде
- FLASH, любые проверки или серверные ошибки
- STATUS рассказывает клиенту, что произошло на сервере.
Мой вопрос: Является ли это допустимым способом обработки сообщений событий на стороне клиента или я иду по пути страдания и боли?
Вы зарегистрировались для программирования, путь страдания и боли гарантированно, будет ли это способствовать в воздухе :) –
Если вы продолжаете идти по дороге, сворачивая свои собственные (что я в итоге сделал с фантастическими результатами), вы можете захотеть реализовать глобальное событие для обработки сообщений. Вы можете подключиться к событию ajaxComplete (http://api.jquery.com/ajaxComplete/) и получить результат от xhr напрямую, а затем проверить, есть ли сообщения для обработки. Я реализовал что-то вроде SO с раскрывающимися сообщениями вверху с тремя уровнями: предупреждение, состояние и ошибка (ошибка - это диалоговое окно). –
Я думал, что это будет больше инь/ян (боль/удовольствие). Где они сказали, что часть удовольствия? – Gutzofter