2011-09-07 57 views
1

用户在表单上输入一些数字和其他数据后,计算总计。用户也可以选择输入折扣金额。我使用jQuery AJAX方法将所有数据发送到Load控制器中的getTotal方法。如果用户输入的折扣金额大于计算的总额,我希望弹出一个消息框(类似于一个JavaScript alert框),表示折扣必须小于总额。有没有干净的方式从控制器做到这一点?如何在控制器中显示消息框?

回答

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,则不会显示消息。

1

不可以。您希望将结果发送回您的ajax响应中,告诉客户端显示消息框。那么你可能会使用JavaScript来显示它。有很多用于显示消息框的jQuery插件。例如:jQueryUI's Dialog

+0

现在我的控制器使用'render'在文本字段中渲染总数,然后通过AJAX将其作为HTML发回。如何渲染总数并在同一个AJAX调用中渲染消息? – ubiquibacon

+1

你需要返回一组不同的数据。例如,某些包含数据的JSON以及显示消息框的内容。使用JavaScript更新文本字段,而不是发送整个HTML。 – Gregg

0

我认为在技术上可以让你的控制器生成javasacript作为对ajax调用的响应,但这样做会非常难看。

更好的是发送JSON。例如:

result = [] 
result.success = total >= discount 
result.total = total 
render result as JSON 

而在Ajax调用中,检查成功,显示成功时总数,如果不成功则显示消息。