Javascript 如何在控制器视图中显示消息框?

Javascript 如何在控制器视图中显示消息框?,javascript,jquery,grails,groovy,gorm,Javascript,Jquery,Grails,Groovy,Gorm,用户在表单上输入一些数字和其他数据后,将计算总数。用户还可以选择输入折扣金额。我使用jqueryajax方法将所有数据发送到Load控制器中的getTotal方法。如果用户输入的折扣金额大于计算出的总额,我希望弹出一个消息框(类似于JavaScript警报框),说明折扣必须小于总额。是否有任何干净的方法从控制器执行此操作?否。您希望在ajax响应中返回一个结果,告诉客户端显示您的消息框。然后您可能会使用JavaScript来显示它。有很多jQuery插件用于显示消息框。例如:.我认为从技术上讲,

用户在表单上输入一些数字和其他数据后,将计算总数。用户还可以选择输入折扣金额。我使用jqueryajax方法将所有数据发送到
Load
控制器中的
getTotal
方法。如果用户输入的折扣金额大于计算出的总额,我希望弹出一个消息框(类似于JavaScript
警报
框),说明折扣必须小于总额。是否有任何干净的方法从控制器执行此操作?

否。您希望在ajax响应中返回一个结果,告诉客户端显示您的消息框。然后您可能会使用JavaScript来显示它。有很多jQuery插件用于显示消息框。例如:.

我认为从技术上讲,让您的控制器生成javasacript作为对ajax调用的响应是可能的,但这是一种非常糟糕的方式

最好是发送JSON。比如:

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

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

以下是我所做的。在我看来,我的一个JavaScript方法中包含以下代码。我使用jQuery的
getJSON
而不是
ajax
,因为它似乎更适合(更干净)

在我的控制器中,我仍然在闭包中使用了
render
方法,但是为JSON修改了它,确保
导入grails.converters.*

render(contentType:"text/json") {
    total = g.textField(name: 'total', value: totalBill, readonly: 'readonly')
    message = errorMessage
}

调用
render
之前已计算了
totalBill
值,
errorMessage
只是一个字符串,其中包含基于错误的消息(负折扣值或折扣值大于total)或根本没有消息。因此,如果消息为
null
则不会显示任何消息。

现在,我的控制器使用
render
在文本字段中呈现总计,然后通过AJAX将其作为HTML发送回。如何在同一个AJAX调用中呈现总计和消息?您需要返回不同的数据集。例如,一些JSON包含数据和一些表示显示消息框的内容。使用JavaScript来更新文本字段,而不是跨页面发送整个HTML。
render(contentType:"text/json") {
    total = g.textField(name: 'total', value: totalBill, readonly: 'readonly')
    message = errorMessage
}