Javascript 调用API的ajax的最佳位置是什么?

Javascript 调用API的ajax的最佳位置是什么?,javascript,jquery,ajax,api,Javascript,Jquery,Ajax,Api,我知道有很多这样的问题,但我没有找到一个合适的解决办法 我正在使用ajax调用API,所以我的问题是我的网页没有响应,所以我发现这只是因为ajax处理不当。请帮助我知道我将ajax放在哪里。我需要在页面加载时调用ajax 我尝试过在没有任何函数的情况下调用ajax,比如 show('ajax Call start for player'); $('#loading').show(); $.ajax({ url: '/home/getPlayers', success: funct

我知道有很多这样的问题,但我没有找到一个合适的解决办法

我正在使用ajax调用API,所以我的问题是我的网页没有响应,所以我发现这只是因为ajax处理不当。请帮助我知道我将ajax放在哪里。我需要在页面加载时调用ajax

我尝试过在没有任何函数的情况下调用ajax,比如

show('ajax Call start for player');
$('#loading').show();
$.ajax({
    url: '/home/getPlayers',
    success: function (data) {
        data = JSON.parse(data);
        playerData = data.Data;
        show('data of player');
//        show(playerData);

        showPlayers(1);
        show('ajax Call complete for player');
        flag = 1;
    }
});

show('ajax Call start for loadplayeronpitch');

$.ajax({
    url: '/home/checkUserTeam',
    success: function (data) {

        while (true) {
            if (flag) {
                loadUserTeampitch(data);
                break;
            }
        }
        show('ajax Call complete for loadplayeronpitch');
    }
});
这不起作用,导致页面无响应

然后,根据其他问题,我尝试在以下函数中调用ajax

$(document).load(function(){

});
$(function(){

});
$(document).bind("load", function () {

});
但是这一切都不正常,你能帮我吗


谢谢。

这应该可以正常工作,但我现在无法测试

$('#loading').show();
var deferedA = $.ajax({
    url: '/home/getPlayers',
    success: function (data) {
        data = JSON.parse(data);
        playerData = data.Data;
        show('data of player');
//        show(playerData);

        showPlayers(1);
        show('ajax Call complete for player');
    }
});

show('ajax Call start for loadplayeronpitch');

var deferedB = $.ajax({
    url: '/home/checkUserTeam'
});

//wait until both request are finished
$.when(deferedA, deferedB)
.done( function (dataA, dataB) {
    loadUserTeampitch(dataB);
    show('ajax Call complete for loadplayeronpitch');
});

编辑我建议改用$。当类似Promise的jQuery实现有点奇怪时,Promise的问题是它只在较新的浏览器上可用,对于较旧的浏览器,您需要一个类库或

,无响应是由whiletrue循环引起的,因此永远不要再这样做:-

您要做的是:仅在第一个ajax调用完成后运行第二个ajax调用。因此,您应该将两个ajax调用放在单独的函数中,然后在页面加载时调用第一个函数

在第一个函数中的第一个ajax的成功部分,调用第二个函数。完成了

function firstAjax() {
   $.ajax({
       url: '/home/getPlayers',
       success: function (data) {
           data = JSON.parse(data);
           playerData = data.Data;
           show('data of player');
           //show(playerData);

           showPlayers(1);
           show('ajax Call complete for player');
           secondAjax();
       }
   });
}

function secondAjax() {
   $.ajax({
       url: '/home/checkUserTeam',
       success: function (data) {
          loadUserTeampitch(data);
       }
   });
}

$(function() {
  firstAjax();
});
编辑:如果你想变得简单,你可以使用下面的方法

<script type="text/javascript">
    $(function() {
        var flag = 0;
        var data1;

        $('#loading').show();
        $.ajax({
            beforeSend: function() {
                show('ajax Call start for player');
            },
            url: '/home/getPlayers',
            success: function(data) {
                flag++;
                data = JSON.parse(data);
                playerData = data.Data;
                show('data of player');
                showPlayers(1);
                show('ajax Call complete for player');
                checkFlag();
            }
        });

        $.ajax({
            beforeSend: function() {
                show('ajax Call start for loadplayeronpitch');
            },
            url: '/home/checkUserTeam',
            success: function(data) {
                flag++;
                data1 = data;
                show('ajax Call complete for loadplayeronpitch');
                checkFlag();
            }
        });

        function checkFlag()
        {
            if (parseInt(flag) == parseInt(2))
            {
                loadUserTeampitch(data1);
            }
        }

    });
</script>

但有时我会得到结果,有时tere会崩溃,那会是什么问题呢?Ajax是异步的,所以你不能判断多个Ajax调用的顺序,我认为你应该添加这样的内容$.ajaxSetup{async:false}@Newinjava您不应使用async:false作为解决方案。@Newinjava因为这样在请求完成时浏览器将阻塞。如果连接不好,服务器速度变慢或需要请求大量数据,则会影响用户体验。只有极少数情况下会使用async:false。@SandhyaGor我更新并取消删除了我的答案以添加$。当我认为它应该按照您期望的方式工作时。事实上,我已经在那里输入了bcoz,它们都是API获取了大量数据,所以如果第一个获取数据,然后第二个调用,则需要很长时间。我已经完成了bcoz,我看到了在网络中,所有呼叫同时启动,所以我认为可以并行进行。这没关系。Javascript中的whiletrue永远不会起作用,因为第一个Ajax的回调不能中断程序流。注意Javascript是单线程的!如果阻止这个线程,就没有出路了。AJAX可以并行调用start吗?我们能给ajax调用提供任何依赖性吗?我建议使用Promise.all或$。当d1、d2用于这种情况时。您可以去掉flag=1只是为了completeness@devnull69就在你发表评论的那一刻删除它;我将不得不研究$。何时会看到结果,谢谢。@SandhyaGor我建议也研究$。当类似承诺的jQuery实现有点奇怪时,不要过多地研究$。Promise的问题在于,它只适用于较新的浏览器,而对于较旧的浏览器,您需要一个类似于或的库