意图:我正在尝试写一些内容,用户将点击页面上的按钮,并查看SQL表在后台自动更新时的情况表示花了这么长时间。
问题:由于某种原因,当我第一次点击它时,我的按钮会一直向我的java servlet发送空值。如果我重新加载页面并再次单击该按钮,那么它将正常工作。但我不能指望我的用户每次访问它时都会重新加载页面。
非常感谢任何帮助!
Jquery v1.11.1(因为这里的一些机器仍然运行IE8) Java Server(Glassfish 3.1) IDE Eclipse Kepler
page.jsp
<script type="text/javascript" src="JavaScript/jquery.js"></script>
<script>
$.ajaxSetup({
cache : false
});
function updateAttdData(processNum, tablePrefix, procName) {
$.ajax({
url : 'TestProcRefresh',
type : 'POST',
async: true,
data : 'tableprefix=' + tablePrefix + '&procname=' + procName,
timeout : 600000,
beforeSend : function() {
$('#Process' + processNum + '_Image').attr("style","visibility:visible");
},
success : function() {
$('#Process' + processNum + '_Div').append("...Successful").css('color', 'green');
$('#Process' + processNum + '_Image').attr("src","images/greencheck.png");
},
error : function() {
$('#Process' + processNum + '_Div').append("...ERROR").css('color', 'red');
$('#Process' + processNum + '_Image').attr("src","images/redx.png");
}
});
}
$(document).ready(function() {
$('#ProcTest').click(function() {
//Disable Button for action
$('#ProcTest').attr("disabled", true);
//Begin Data Refresh
updateAttdData(1, 'MTH_', 'UPDATE_1');
updateAttdData(2, 'MTH_', 'UPDATE_2');
updateAttdData(3, 'MTH_', 'UPDATE_3');
updateAttdData(4, 'MTH_', 'UPDATE_4');
});
});
</script>
<div>
<button type="button" id="ProcTest">Stored Proc Test</button>
</div>
<div>
<table>
<thead>
<tr>
<th> </th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr>
<td><img id="Process1_Image" src="images/loading.gif"
alt="Processing..." style="visibility: hidden" width="32"
height="32" /></td>
<td><div id="Process1_Div">UPDATE_1</div></td>
</tr>
<tr>
<td><img id="Process2_Image" src="images/loading.gif"
alt="Processing..." style="visibility: hidden" width="32"
height="32" /></td>
<td><div id="Process2_Div">UPDATE_2</div></td>
</tr>
<tr>
<td><img id="Process3_Image" src="images/loading.gif"
alt="Processing..." style="visibility: hidden" width="32"
height="32" /></td>
<td><div id="Process3_Div">UPDATE_3</div></td>
</tr>
<tr>
<td><img id="Process4_Image" src="images/loading.gif"
alt="Processing..." style="visibility: hidden" width="32"
height="32" /></td>
<td><div id="Process4_Div">UPDATE_4</div></td>
</tr>
</tbody>
</table>
TestProcRefresh.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//System.out.println("TestProcRefresh - Start doPost");
System.out.println(request.getParameter("tableprefix")+" - "+request.getParameter("procname"));
日志
我在运行它时回来的日志就像上面的问题一样,我得到了这个(我主演了......
Info: Test page load
Info: null - null
Info: null - null
Info: MTH_ - UPDATE_1
Info: null - null
Info: Test page load
Info: MTH_ - UPDATE_1
Info: MTH_ - UPDATE_2
Info: MTH_ - UPDATE_3
Info: MTH_ - UPDATE_4
如果您需要更多信息,我会根据需要更新此帖子。
修改 所以看起来好像它只适用于IE而且只适用于POST类型。我可以整天使用GET,但我想使用POST。 POST适用于Chrome,但95%的用户使用的是IE。
答案 0 :(得分:0)
当您进入success
或error
回调时,调用ajax的函数中的变量不再存在。那些是回调,而不是班级的成员。好的,所以解决方法是通过在服务器端打印它(在ajax请求调用的页面中)将某些东西返回给你的ajax回调,然后使用它。例如,如果您从服务器端打印一些JSon(注意data
参数,其中包含您在服务器端打印的内容):
success : function(data) {
$('#Process' + data.processNum + '_Div').append("...Successful").css('color', 'green');
$('#Process' + data.processNum + '_Image').attr("src","images/greencheck.png");
},