2013-02-27 16 views
-1

我通過ajax從php文件獲取數據。根據我需要做的一些處理的數據。我在代碼中加入了一些警報,從中我意識到ajax之外的代碼在ajax獲取數據之前正在執行。我希望在從php文件接收數據後完成代碼。jQuery ajax:想要對代碼進程進行排序

代碼:

$(function() { 
    var originalData=""; 
    $.ajax({          
     url: 'data.php',      
     data: "",       
     dataType: 'text',    
     success: function(data)   
     { 
     originalData=data; 
     alert("originalData 1 "+ originalData); 
     } 
    }); 

    alert("originalData 2 "+ originalData); 
    ... 
     Processing code 
    ... 
}); 

警報的順序是:

第一: 「originalData 2」

二: 「originalData 1」

一個選項是我包括Processing code裏面的success功能,但我不能這樣做,因爲後來我想把一個邏輯,我可以有一個緩衝區data(至少4-5堆棧深),因爲我希望用戶在處理當前的代碼data後立即獲得新的data,而不是等待通過php檢索data

+0

Ajax使用異步處理模型,其中一旦給服務器發送請求,客戶端將執行下一個語句,而不等待響應於復出。您需要在成功回調中使用來自ajax調用的數據進行所有處理。 – 2013-02-27 06:37:35

回答

1

Ajax使用異步處理模型,其中一旦發送到服務器的請求,客戶端將執行下一個語句而不等待回覆的響應。一旦服務器響應成功或失敗回調將根據響應的狀態而被調用。

您需要在成功回調中使用來自ajax調用的數據進行所有處理。

例如:

$.ajax({ 
    .... 
}).done(function(data) { 
    //To all you post processing here 
}).fail(function(){ 
    //Do your error handling here 
}); 
+0

我希望我在不使用回調函數中的代碼的情況下也能做到這一點。 – user1517108 2013-03-01 16:39:43

+1

您可以使用ajax提供的'async:false'選項,但建議使用它,因爲它會阻止瀏覽器線程,直到響應從服務器返回(即:UI不會重繪,UI將凍結而不允許任何用戶交互) – 2013-03-01 16:42:02

+0

完美。這正是我所期待的。我不知道Google搜索時如何錯過它。 – user1517108 2013-03-01 16:44:40

1

一個Ajax調用不停止執行下一行,所以你將不得不做一些象下面這樣:

$(function() { 
var originalData=""; 
$.ajax({          
    url: 'data.php',      
    data: "",       
    dataType: 'text',    
    success: function(data)   
    { 
    originalData=data; 
    alert("originalData 1 "+ originalData); 
    myFunction(); 
    } 
}); 

function myfunction() 
{ 
alert("originalData 2 "+ originalData); 
... 
    Processing code 
... 
} 

});

+0

正如在我原來的問題....我不能把代碼放在成功回調函數。 – user1517108 2013-02-27 07:08:49