Как отобразить окно сообщения в поле зрения контроллера? - PullRequest
1 голос
/ 07 сентября 2011

После того, как пользователь вводит некоторые цифры и другие данные в форму, вычисляется общая сумма. Пользователь также может ввести сумму скидки. Я использую метод jQuery AJAX для отправки всех данных в метод getTotal в контроллере Load. Если пользователь ввел сумму скидки, превышающую вычисленную сумму, я хочу, чтобы всплыло окно сообщения (аналогично окну JavaScript alert), сообщающее, что скидка должна быть меньше суммы. Есть ли какой-нибудь чистый способ сделать это с контроллера?

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

Вот что я сделал. На мой взгляд, у меня есть следующий код в одном из моих методов 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 голос
/ 07 сентября 2011

Нет. Вы хотели бы отправить результат обратно в свой ответ ajax, который говорит клиенту отображать ваше окно сообщения. Тогда вы, вероятно, используете JavaScript, чтобы показать это. Существует множество плагинов jQuery для отображения окон сообщений. Например: Диалог jQueryUI .

0 голосов
/ 07 сентября 2011

Я думаю, что технически возможно, чтобы ваш контроллер генерировал javasacript как ответ на вызов ajax, но это был бы очень уродливый способ сделать это.

Лучше отправлять JSON.Что-то вроде:

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

И в вызове Ajax проверьте успешность, покажите сумму, если успешно, покажите сообщение, если нет.

...