私はチェックボックスをクリックすると呼び出されるAJAX関数を持っています。通常、それは私のページの一部をオンまたはオフに切り替えます。それはうまくいくが、エラーが発生したとき、すなわち。特定の状況でチェックボックスをクリックすることが許可されていない場合、AJAXにこれが成功しなかったことを知らせたいと思います。Grails、コントローラからAJAXコールにエラーを返すにはどうすればいいですか?
また、フラッシュメッセージの使用と同じ場所に表示されるようにエラーメッセージを修正する方法もわかりません。
私がflash-messageを使用すると、同じページに再度リダイレクトする必要があり、そのページを内部に取得する必要があり、それほどうれしくありません。
私はそれが一般的なケースだと思うか、このb'causeのための標準的な解決策が存在するはずですか?
def useWeeklyVolumes() {
println("useWeeklyVolumes - params: "+params)
def od = OfferDetail.get(params.id)
String status = od.offerHeader.status
if ((status == 'Sold') || (status == 'Rejected')) {
transactionStatus.setRollbackOnly()
return render(status: 400, text:"Offer can not be changed (Sold/Rejected)")
}
そして、ここにAJAX呼び出しがどのように見えるかです:
これは、この場合には使用されているコントローラの一部がどのようです。
$(document).ready(function(){
$(document).on('change', '.useWeeklyVolumes', function (event){
$.ajax({
url: '${g.createLink(controller:'offerDetail', action:'useWeeklyVolumes')}',
data: {ckbWeeklyVolumes:this.checked, id:this.id},
type: 'get',
success: function (data) { $('#nono').html(data); },
error: function (jqXHR) {document.querySelector('#alert').innerHTML = jqXHR.responseText;
const timeoutID = window.setTimeout(() => {
messageBox.innerHTML = '';
window.clearTimeout(timeoutID);
}, 3000);}
});
});
});
これは私の最新の試みです:
<span id="alert"></span>
エラーメッセージがここに表示されますが、私はリフレッシュを行うまで、それはそこに残っているだろう:私はこれを追加GSPで
<script>
$(document).ready(function(){
$(document).on('change', '.batman', function (event){
alert('Hej');
$.ajax({
url: '${g.createLink(controller:'person', action:'register')}',
data: {registered:this.checked, id:this.id},
type: 'get',
success: function (data) { $('#alert').html(data); },
error: function (jqXHR) {const alert = document.querySelector('#alert').innerHTML = jqXHR.responseText;
const timeoutID = window.setTimeout(function() {
alert.innerHTML = '';
window.clearTimeout(timeoutID);
}, 3000);}
});
});
});
</script>
。
最終的な解決策:
<script>
$(document).ready(function(){
$(document).on('change', '.batman', function (event){
$.ajax({
url: '${g.createLink(controller:'person', action:'register')}',
data: {registered:this.checked, id:this.id},
type: 'get',
success: function (data) { $('#alert').html(data); },
error: function (jqXHR) {const alert = document.querySelector('#alert');
alert.innerHTML = jqXHR.responseText;
const timeoutID = window.setTimeout(function() {
alert.innerHTML = '';
window.clearTimeout(timeoutID);
}, 3000);
}
});
});
});
別の誤差関数と代替ソリューション:
<script>
$(document).ready(function(){
$(document).on('change', '.batman', function (event){
$.ajax({
url: '${g.createLink(controller:'person', action:'register')}',
data: {registered:this.checked, id:this.id},
type: 'get',
success: function (data) { $('#alert').html(data); },
error: function (jqXHR) {displayAlertMessage(jqXHR.responseText)}
});
});
});
function displayAlertMessage(message) {
var timeOut = 5
jQuery('#alert').text(message).fadeIn()
jQuery('#alert').css("display", "block")
setTimeout(function() {
jQuery('#alert').fadeOut()
jQuery('#alert').css("display", "none")
}, timeOut * 1000);
}
</script>
のために行くことにした場合、私は非常に明確ではありませんよ応答を使用して最初のバージョンで
は、最初のエラーを言うときにはあなたが状況を扱っているわけバージョンのドキュメントを読みますコントローラーの動作&予期しないエラーではなく、フラッシュ領域にメッセージを中継したいですか? –
はい、申し出のステータスが「拒否されました」とし、flash.message領域に表示されるエラーメッセージを返信したいとします。 – larand