Ajax任务不一致

时间:2015-02-16 19:34:27

标签: java jquery ajax jsp

意图:我正在尝试写一些内容,用户将点击页面上的按钮,并查看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>&nbsp;</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。

1 个答案:

答案 0 :(得分:0)

当您进入successerror回调时,调用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");
        },