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);
所以现在加载内容包含两部分:
我的问题是:这是一种在客户端处理事件消息传递的有效方法,还是我会走上痛苦和痛苦的道路?
答案 0 :(得分:2)
我认为这值得看http://www.jboss.org/errai
答案 1 :(得分:2)
OpenAjax Hub(来自OpenAjax联盟)指定基于发布/订阅的事件中心(主题总线)。看看开源参考实现:http://openajaxallianc.sourceforge.net/。
TIBCO还有一个用JavaScript实现的事件总线PageBus,但我想上面的内容更“标准”。
答案 2 :(得分:1)
我会投票给@ dan-heberden的建议:使用api.jquery.com/ajaxComplete或api.jquery.com/ajaxSucces,例如以下用jquery处理ajax事件。
$('.contentContainer').ajaxSuccess(function(e, xhr, settings) {
var msg.html = "<p>You did it!</p>";
shipAndChargeHandler(msg);
});
我相信你的问题不需要框架,接受jquery本身。
答案 3 :(得分:1)
为什么你想从头开始构建一个msg处理程序,从而走上痛苦和痛苦的道路?如果你已经在使用像jQuery这样的js Lib,当然,你有一套完整的锐化刀片,比如 Global Ajax Event Handlers ,还有一个像Theme Roller这样的css lib,用于你的邮件样式!?
正如其他SO伙伴所提到的:这来自jQuery页面:
在Ajax请求时显示消息 成功完成。
$("#msg").ajaxSuccess(function(evt, request, settings){
$(this).append("<li>Successful Request!</li>");
});
然后,我能做的,也许是,指出你使用更好的工具es。:
因为您没有寻找典型的AJAX错误,但是您希望将其用于表单验证目的,我建议您使用以下内容:
$.ajaxComplete(function(event, xhr, options) {
var data = xhr.responceText;
switch(data) {
case 'err_1':
// do_something(1)
break;
case 'err_2':
// do_something(2)
break;
case 'err_3':
// do_something(3)
break;
}
});
在验证所有数据后,每个err_#
来自后端,如果发现错误,则通过ajax发送代码错误,剩下的就是糖! ;)
PS:通过这样做,如果禁用了javascript,你也可以防止滥用!