我正在jsp页面上编写jquery代码并通过它调用JavaScript函数。
这是jquery函数
$(function () {
$('#defaultCountdown').countdown({until: $.countdown('//SomeTime'),onExpiry: liftOff});
});
liftOff是一个javascript方法,在指定的时间到期后调用。
这是JavaScript函数
<script>
function liftOff() {
alert("Before Delete");
<% DAO_Object.deleteRecord(ID);%>
alert("After Delete");
}
</script>
现在问题是,行<% DAO_Object.deleteRecord(ID);%>
在函数调用之前执行,并且数据库中的记录被删除。在函数调用之后,警报语句正确执行。
我是否错误地调用了deleteRecord
方法?
答案 0 :(得分:3)
您正在将服务器端JSP逻辑与客户端JavaScript逻辑混合在一起。
<% %>
之间的所有内容在处理请求时都会在您的servlet上运行,因此当您在浏览器中获得响应时,该记录已被删除。如果您使用Chrome DevTools或类似工具查看您在浏览器中收到的HTML / JS,您会发现这些alert(...)
来电之间没有任何内容。
此处的解决方案是setup a route处理服务器端的deleteRecord()
,并在liftOff()
方法中将其称为via AJAX。所以liftOff()
看起来像这样:
// assuming `id` is a string here
function liftOff(id) {
alert("Before Delete");
// You'll have to setup this endpoint to run
// your `DAO_Object.deleteRecord(ID);` code
// in your JSP code.
$.get("/delete/my/record/" + id, {
error: function(e){
// some kind of error occurred in making the request
},
success: function(resp){
// `resp` is the response from the server
alert("After Delete");
}
});
}