Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时在jquery的ajax函数中使用async false和async true_Ajax_Jquery - Fatal编程技术网

何时在jquery的ajax函数中使用async false和async true

何时在jquery的ajax函数中使用async false和async true,ajax,jquery,Ajax,Jquery,在ajax调用中何时使用async false或async true。在性能方面有什么区别吗 例如: $.ajax({ url : endpoint, type : "post", async : false, success : function(data) { if (i==1){ getMetricData(data)} el

在ajax调用中何时使用async false或async true。在性能方面有什么区别吗

例如:

$.ajax({
        url : endpoint,
        type : "post",
        async : false,
        success : function(data) {
                if (i==1){  
                getMetricData(data)}

                else if (i==2)
                {
                    capture = data;
                }

        }
    });

这与性能无关

当需要在浏览器传递到其他代码之前完成ajax请求时,可以将async设置为false:

<script>
    // ...
    $.ajax(... async: false ...); // Hey browser! first complete this request, 
                                  // then go for other codes

    $.ajax(...); // Executed after the completion of the previous async:false request.
</script>

// ...
$.ajax(…异步:false…)//嘿,浏览器!首先完成这个请求,
//然后去其他代码
$.ajax(…);//在完成上一个async:false请求后执行。

如果您可以并行执行多个操作(无相互依赖),那么最好采用异步方式。 如果您需要它来继续加载下一个内容,您可以使用synchronous,但请注意,此选项已弃用,以避免滥用Synch:

在函数
ActionForm之后,将首先执行
SetParamForToDoList
。EditActionFormPopup
将启动

  • 当async设置设置为false时,将进行同步调用,而不是异步调用
  • 当jqueryajax函数的异步设置设置为true时,将进行jQuery异步调用。AJAX本身意味着异步JavaScript和XML,因此,如果通过将async设置设置为false使其同步,它将不再是AJAX调用

  • 基本上,同步请求在允许任何代码处理继续之前等待从请求接收到响应。起初,这似乎是一件好事,但绝对不是

    如前所述,当请求进行中时,浏览器将停止所有脚本的执行以及UI的呈现,因为大多数浏览器的JS引擎(实际上)是单线程的。这意味着对用户来说,浏览器将显示为无响应,他们甚至可能会看到操作系统级别的警告,表示程序没有响应,并询问他们是否应该结束其进程。正是由于这个原因,synchronous JS已被弃用,并且您会在devtools控制台中看到有关其使用的警告

    到目前为止,异步请求的替代方案是更好的做法,应该尽可能始终使用。这意味着您需要知道如何使用回调和/或承诺,以便在异步请求完成时处理对它们的响应,以及如何构造JS以使用此模式。已经有很多资源可以用于这方面,所以我在这里不再赘述

    很少有需要同步请求的情况。事实上,我唯一能想到的是在
    beforeunload
    事件处理程序中发出请求时,即使这样,也不能保证它能正常工作


    总之。您应该学习并在所有请求中使用异步模式。同步请求现在是一种反模式,它会导致比它们通常解决的问题更多的问题。

    可能的重复:这不是性能问题。基本上,当您需要以某种特定方式(如异步或同步方式)执行代码或服务调用时,它非常有用。根据您的代码定义,在此代码之后,您定义了一些代码和ajax调用,使async选项为true,然后它将像异步一样执行。我想纠正一件事,ajax中的异步总是会影响性能,因为它总是像线程一样等待一个请求完成。
    ShowPopUpForToDoList: function (id, apprId, tab) {
        var snapShot = "isFromAlert";
        if (tab != "Request")
            snapShot = "isFromTodoList";
        $.ajax({
            type: "GET",
            url: common.GetRootUrl('ActionForm/SetParamForToDoList'),
            data: { id: id, tab: tab },
            async:false,
            success: function (data) {
                ActionForm.EditActionFormPopup(id, snapShot);
            }
        });
    },