2012-10-09 127 views
1

我有以下代碼: 裏面我把2 alert()進行調試。 爲什麼alert2在alert1之前顯示?jquery同步問題

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 

     $.ajax({ 
      type: "POST", 
      url: "ManagerBaseKit.aspx/GetDummyVersions", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (result) { 
       var items = []; 
       $.each(result.d.Version, function (key, val) { 
        items.push('<li id="' + key + '">' + val + '</li>'); 
       }); 
       $('<ol/>', { 
        'id': 'selectable', 
        html: items.join('') 
       }).appendTo('.baseVersionsTest'); 
       alert('1'); // should be alerted 1st 

      } 
     }); 

     alert('2'); // should be alerted 2nd 

    }); 

</script> 

編輯: 我怎樣才能使$.ajax被稱爲第一件事情?

+6

因爲$阿賈克斯是異步的,成功的功能將調用上 – Anoop

+0

良好讀取該服務器響應的回報:http://jqfundamentals.com/chapter/ajax-deferreds – m90

+0

我可以做$就成爲網頁上的第一件事?我的代碼依賴於其餘部分。我可以讓它同步嗎? – user829174

回答

2

當文檔準備好並且Alert1在成功的ajax請求後觸發時,觸發Alert2。你的代碼可以重新寫成如下形式:

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
    alert('2'); // Still the same functionality 

     $.ajax({ 
      type: "POST", 
      url: "ManagerBaseKit.aspx/GetDummyVersions", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (result) { 
       var items = []; 
       $.each(result.d.Version, function (key, val) { 
        items.push('<li id="' + key + '">' + val + '</li>'); 
       }); 
       $('<ol/>', { 
        'id': 'selectable', 
        html: items.join('') 
       }).appendTo('.baseVersionsTest'); 
       alert('1'); // should be alerted 1st 

      } 
     }); 



    }); 

</script> 

現在你可以看到爲什麼警報2首先觸發(和文件準備好)

+0

感謝您的回答,我如何讓$ .ajax被稱爲第一件事? – user829174

+0

也許你可以嘗試在你的ajax查詢中添加'async:false'。看看API http://api.jquery.com/jQuery.ajax/ – RRikesh

0

您可以通過設置異步/異步方式調用AJAX功能同步如真或假。

$.ajax({ 
url : yourURL, 
async : false, 
... 
});