HTML / GSP
<li class="gallery-item">
<form>
.....
<a data-portfolio-id="${portfolioInstance?.id}" data-id="${part.id}" class="btn-delete" href="javascript:void(0);">
</form>
</li>
JS
$('.btn-delete').click(function(e){
e.preventDefault();
$.ajax({
url: '/deletePart/'+ $(this).data('id'),
type: 'GET',
dataType: 'json',
success: function(response) {
$(this).closest('.gallery-item').fadeOut().remove();
//remove() seems not to be working?
},
error: function( error ) {
console.log( error );
}
});
});
控制器
def deletePart() {
log.debug params
def id = params.id?:params.partId
def part = PortfolioPart.get(id)
// log.debug " >>>>>>" + part
def portfolio = part.portfolio
try {
part.delete(flush: true)
flash.message = message(code: 'default.deleted.message', args: [message(code: 'part.label', default: 'PortfolioPart'), id])
} catch (DataIntegrityViolationException e) {
flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'portfolio.label', default: 'Portfolio'), id])
redirect(action: "edit", id: portfolio.id)
}
withFormat {
html {
redirect(action: "edit", id: portfolio.id)
}
json {
def out = [id:id]
render out as JSON
}
}
}
尝试使用之前上传的ID删除图片,但它一直给我500个内部服务器错误。
获取http:// localhost / deletePart / [220] 500(内部服务器错误)
感谢任何帮助!
更新 好的设法让错误消失,但只剩下remove(),不会删除gallery-item块?
答案 0 :(得分:1)
这听起来像一个问题,默认情况下Domain对象有一个方法将params id解析为long,其中你的对象没有这个方法。 Params是字符串的集合,因此您需要做的是将param.id从字符串更改为long。尝试:
def part = PortfolioPart.get(params.long('id'))
祝你好运。
答案 1 :(得分:0)
根据错误消息,它确定 id 为String
,而Grails DB中的ID为Long
,因此您需要在调用{{1}之前对其进行转换get
Domain类的方法:
PortfolioPart
要检查它是否是一个字符串,你可以这样做:
def part = PortfolioPart.get(Long.valueOf(id).longValue());