2013-02-27 61 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