我有以下电话:
getData(0);
getData(1);
getData(2);
这些调用javascript函数:
function getData(Code) {
$.post('/adminA/GetData',
{ Code: Code },
function (data) {
问题是我的数据无序返回。有没有办法让我按顺序返回数据?
答案 0 :(得分:17)
另一种选择是使用ajaxSetup
function getData(Code) {
$.ajaxSetup({async: false});
$.post('/adminA/GetData',{
Code: Code }, function (data) {
// Do Something
});
$.ajaxSetup({async: true}); //So as to avoid any other ajax calls made sybchrounously
}
答案 1 :(得分:9)
您可以使用$ .ajax,并将async设置为false。
答案 2 :(得分:6)
同步调用这三个ajax请求会冻结您的浏览器。你最好使用jQuery的Deferred对象。试试这个:
function getData(Code) {
return $.post('/adminA/GetData', { Code: Code }, function (data) {/*etc.*/});
}
getData(0).done(function() {
getData(1).done(function() {
getData(2);
});
});
您还应考虑将您的调用合并为一个,并更改服务器逻辑以处理它。这最终将比三个请求更快:
function getData(firstCode, secondCode, thirdCode) {
$.post('/adminA/GetData', {
codeOne : firstCode,
codeTwo : secondCode,
codeThree : thirdCode
}, function (data) {/*etc.*/});
答案 3 :(得分:2)
您可以使用jQuery文档中的$.ajaxSetup({ asynch: false })
:
jQuery.ajaxSetup(选项)
这将使用jQuery为所有ajax
请求设置选项。
答案 4 :(得分:0)
正如另一个答案所说,您可以使用$ .ajax代替并将async设置为false。但是,这将挂起浏览器,直到所有调用完成。我会改为让每个ajax调用在其回调中调用下一个。这样它保持异步,因此不会挂起浏览器。
类似的东西:
function getData(Code) {
$.post('/adminA/GetData',
{ Code: Code },
function (data) {
getData(Code+1)
});
}
显然有什么要告诉它何时终止。