2010-07-03 36 views
1

我有下面的代碼之前: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> 

我遇到的問題是,Ajax調用是調用test_multiple不久進入成功的功能。 PHP完成。 test_multiple做了很多後端工作,如果我直接調用它,該頁面大約需要15秒才能加載。使用它,即使我可以看到後端的工作還沒有完成,它會報告它立即完成。

爲什麼馬上輸入成功?我如何阻止它這樣做?

此外,Firebug正在向test_multiple報告中止的POST請求,但是向test_multiple發送了成功的GET請求。

+0

這是一個文件上傳?...文件上傳不能通過ajax沒有一些閃光燈的幫助,據我所知... – Reigel 2010-07-03 04:12:34

+0

嗯,它可以,如果你創建一個隱藏的iframe並提交形式就是這樣。 include complete:function(XMLHttpRequest,textStatus){$('#ajax-panel')。append('Request Complete'); } 但我認爲這只是返回一個失敗(成功)的請求。您可以檢查狀態的第二個成功參數(data,textStatus,XMLHttpRequest),您可以檢查請求對象以獲取更多關於請求的數據。 – Andir 2010-07-03 04:23:07

+0

它不是上傳文件,而是在後端的服務器之間傳輸一組文件。儘管用戶的計算機沒有任何內容。它正在發揮作用,它只是在完成轉移之前調用成功功能。 – Andy 2010-07-03 15:08:18

回答

2

這可能是因爲您的表單正在以正常方式提交。您需要在提交處理程序結束時提供return false以防止表單重定向到指定的「操作」,從而允許XHR請求完成。

此外,螢火蟲正在報告 中止POST請求test_multiple 但一個成功的GET請求 test_multiple。

標記中的表單標記沒有設置'method'屬性,所以它默認爲GET。這是您的表單以正常方式提交的證據。中止的POST可能是因爲XHR請求在服務器收到正常的HTTP GET請求並開始發送輸出之前沒有得到完成的機會。

+0

我在提交處理程序的末尾添加了'return false',但現在它跳到了錯誤處理程序。調用腳本仍然成功完成(在後端檢查),但JQuery說它沒有。 我還加了'method =「POST」'(d'oh!)。 Firebug仍然顯示這個POST請求中止,但正如預期的那樣,它不會恢復爲GET。如上所述,請求確實完成。 – Andy 2010-07-03 15:29:31

+0

我接受了這個答案,因爲它回答了我爲什麼要進入Jquery的成功方法的問題。我會打開一個關於Firebug和中止POST的新問題。謝謝。 – Andy 2010-07-04 01:50:29