在调用页面完成之前,JQuery .ajax进入Success

时间:2010-07-03 03:57:27

标签: php ajax jquery

我有以下代码:

<script type="text/javascript">

        $(function(){
        $("#AddMaps").submit(function(){

            var $form = $('#AddMaps');

            $.ajax({
                type: 'POST',
                url: $form.attr( 'action' ),
                data: $form.serialize(),
                dataType: "json",
                beforeSend:function(){
                    // Set up Loading Image and disable submit button
                    $('#ajax-panel').html('<div class="loading"><img src="loader.gif" alt="Loading..." /></div>');
                },
                success:function(data){
                    // Successful Request; do something
                    $('#ajax-panel').empty();
                    if (data.response != "Success"){
                        $('#ajax-panel').append('Error Occurred' + data.response);
                    }
                    else {
                        $('#ajax-panel').append('File(s) Uploaded');
                    }
                },
                error:function(){
                    // Failed Request; Freak out
                    $('#ajax-panel').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
                }
            });
        });
        });



        </script>

        <form id="AddMaps" action="test_multiple.php">
            <fieldset>
            <label for="server">Select a Server:</label>
            <select name="server" id="server">
        <option value="1">Server 1</option>
        <option value="2">Server 2</option>
        <option value="3">Server 3</option>
            </select>
            </fieldset>
            <input name="submit" type="submit" id="submit" value="Upload">
            <div id="ajax-panel"></div>
        </form>

我遇到的问题是,在调用test_multiple.php之前很久,ajax调用就进入了成功函数。 test_multiple正在做很多后端工作,如果我直接调用它,页面加载大约需要15秒。使用它,它报告它立即完成,即使我可以看到后端的工作尚未完成。

为什么它立即成功?我如何阻止它这样做?

此外,Firebug正在向test_multiple报告中止的POST请求,但是向test_multiple报告了成功的GET请求。

1 个答案:

答案 0 :(得分:2)

这可能正在发生,因为您的表单正在以正常方式提交。您需要在提交处理程序的末尾return false以防止表单重定向到指定的“操作”,从而允许XHR请求完成。

  

另外,Firebug报道了一个   中止对test_multiple的POST请求   但成功的GET请求   test_multiple。

标记中的表单标记没有设置“方法”属性,因此默认为GET。这证明您的表单是以正常方式提交的。中止的POST可能是因为在服务器收到正常的HTTP GET请求并开始发送输出之前,XHR请求没有机会完成。