我正在使用Backbone构建购物车,我很难确定如何构建与服务器的交互。当用户点击结账时(以及验证后)我需要:
使用order.save()保存订单 - 因为订单是在客户端上创建的,所以它将点击服务器上的路由并返回一个ID。在处理订单之前我需要ID。
成功后,我在订单上调用了一个自定义方法,该方法再次点击服务器,向卡处理服务发出请求。
我要么向客户报告错误,让他修改并重试或更新订单记录并在数据库中创建付款记录。
以下是订单模型中的processOrder方法:
processOrder: function() {
var order = this.toJSON();
$.ajax({
url: '/api/order/process',
type: 'POST',
data: order,
dataType: 'json',
success: function(res) {
console.log(res);
},
error: function(err) {
//show error message
console.log('error: ' + JSON.stringify(err));
}
});
}
这是我在视图中提交表单的地方
saveOrder: function() {
...
var order = this.order;
order.set(this.frmJSON);
order.save(this.frmJSON, {
success: function(res) {
console.log('order saved...');
order.processOrder();
},
error: function(err) {
console.log(JSON.stringify(err));
}
});
}
订单保存在服务器上,订单会在其中插入ID。当我调用processOrder时,它会一直工作,直到它进入ajax调用。它永远不会到达服务器,浏览器挂起而没有错误。有没有更好的方法来构建这些步骤?