javascript - 从 Javascript 中的循环调用的缓慢 C# 进程正在锁定我的应用程序,直到它完成

标签 javascript c# jquery

我正在通过应用程序中的 Web API Controller 对 C# 进程进行 Ajax 调用。这是在 JQuery 循环中完成的。 C# 过程需要花费大量时间。当 JQuery 循环运行时,应用程序被锁定,不能用它做任何其他事情。代码如下:

    this.PDFReports = function () {

        var reports = JSON.parse(localStorage.getItem("reportsInfo"))

        var reportPDFPaths = []

        $.each(reports, function (index, r) {

            //No need to render report as PDF if it is already.
            if (r.TypeName != "PDF") {

                var reportid = r.BOReportID
                var parms = r.parms
                var parmslength = Object.keys(parms).length
                var parmstring = ""

                for (i = 0; i < parmslength; i++) {
                    var parmname = parms[i].name
                    var parmvalue = parms[i].value

                    if (parmstring.length > 0) {
                        parmstring = parmstring + "|Name:" + parmname + "," + "Value:" + parmvalue
                    }
                    else {
                        parmstring = parmstring + "Name:" + parmname + "," + "Value:" + parmvalue
                    }

                }

                //Render crystal report as PDF file. 
                var PDFCreateUrl = "/odata/PDFReport"
                PDFCreateAjaxRequest("post", PDFCreateUrl, { ReportID: reportid, ParmString: parmstring })
                                .done(function (result) {
                                    reportPDFPaths.push(result.value)

                                })
                               .fail(function (jqXHR, textStatus, errorThrown) {
                               });

                function PDFCreateAjaxRequest(type, url, data) {
                    var options = {
                        dataType: "json",
                        contentType: "application/json",
                        type: type,
                        data: data ? JSON.stringify(data) : null,
                        async: false
                    };
                    return $.ajax(url, options);
                }

            }
            else
            {
                var ReportID = r.ReportID
                var fullpath = localStorage.getItem("PDFServerPath" + ReportID)
                reportPDFPaths.push(fullpath)
            }

        })


        localStorage.setItem("reportPDFPaths", reportPDFPaths)
    }

最佳答案

            function PDFCreateAjaxRequest(type, url, data) {
                var options = {
                    dataType: "json",
                    contentType: "application/json",
                    type: type,
                    data: data ? JSON.stringify(data) : null,
                    async: false // There's your problem
                };
                return $.ajax(url, options);
            }

同步 XHR 将阻止执行。考虑以异步方式编写整个 PDFReports 函数,这样就可以避免 async:false

关于javascript - 从 Javascript 中的循环调用的缓慢 C# 进程正在锁定我的应用程序,直到它完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42861184/

相关文章:

javascript - 如何处理 setTimeout() 的多个实例?

c# - 查找颜色的像素坐标

javascript - 如何在 JQTouch 工具栏 div 中水平显示列表元素(可能使用 CSS)

jquery - 同位素响应在真正的大屏幕上表现异常

javascript - jQuery(empty object literal) 到底做了什么?

javascript - 将 PDF 存储到 Google 云端硬盘

javascript - 基本 Mocha TDD 接口(interface)

javascript - Vanilla javascript 忽略第一个选项卡/单击

javascript - 如何将数据从 .NET Controller 显示到 React View ?

c# - 如何使 asp Validator 通过 jQuery/javascript 验证