用户在表单上输入一些数字和其他数据后,计算总计。用户还可以选择输入折扣金额。我使用jQuery AJAX方法将所有数据发送到getTotal
控制器中的Load
方法。如果用户输入的折扣金额大于计算的总金额,我希望弹出一个消息框(类似于JavaScript alert
框),说明折扣必须小于总金额。从控制器那里有没有干净的方法呢?
答案 0 :(得分:1)
没有。您希望在ajax响应中发回结果,告知客户端显示您的消息框。然后你可能会用JavaScript来展示它。有很多用于显示消息框的jQuery插件。例如:jQueryUI's Dialog。
答案 1 :(得分:1)
这就是我所做的。在我看来,我在我的一个JavaScript方法中有以下代码。我使用jQuery的getJSON
而不是ajax
,因为它看起来更合适(更干净)。
$.getJSON(
"/truckingmanagement/load/getTotal",
{cargoSource:cargoSource, cargo:cargo, haulRate:haulRate, tonnage:tonnage, mileage:mileage, discount:discount, taxExempt:taxExempt},
function(result) {
if(result.message != null){
alert(result.message);
$("#discount").val("");
$("#totalCell").html(result.total);
}
else{
$("#totalCell").html(result.total);
}
});
我的控制器我仍然在我的闭包中使用了render
方法,但是为JSON修改了它,确保import grails.converters.*
。
render(contentType:"text/json") {
total = g.textField(name: 'total', value: totalBill, readonly: 'readonly')
message = errorMessage
}
在调用totalBill
之前计算了render
值,而errorMessage
只是一个字符串,其中包含基于错误内容的消息(负折扣值或折扣值更大)总数)或根本没有消息。因此,如果消息为null
,则不会显示任何消息。
答案 2 :(得分:0)
我认为技术上可以让你的控制器生成javasacript作为对ajax调用的响应,但这是一种非常难看的方式。
更好的是发送JSON。类似的东西:
result = []
result.success = total >= discount
result.total = total
render result as JSON
在Ajax调用中,检查是否成功,如果成功则显示总数,如果没有则显示消息。