Javascript中从循环调用的缓慢C#进程正在锁定我的应用程序,直到它完成为止
我正在通过应用程序中的Web API控制器对C#进程进行Ajax调用。这是在JQuery循环中完成的。C#过程需要很多时间。当JQuery循环运行时,应用程序被锁定,无法对其执行任何其他操作。代码如下:Javascript中从循环调用的缓慢C#进程正在锁定我的应用程序,直到它完成为止,javascript,c#,jquery,Javascript,C#,Jquery,我正在通过应用程序中的Web API控制器对C#进程进行Ajax调用。这是在JQuery循环中完成的。C#过程需要很多时间。当JQuery循环运行时,应用程序被锁定,无法对其执行任何其他操作。代码如下: this.PDFReports = function () { var reports = JSON.parse(localStorage.getItem("reportsInfo")) var reportPDFPaths = []
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)
}
this.PDFReports=函数(){
var reports=JSON.parse(localStorage.getItem(“reportsInfo”))
var reportPDFPaths=[]
$。每个(报告、功能(索引、r){
//如果报表已经是PDF格式,则无需将其呈现为PDF格式。
如果(r.TypeName!=“PDF”){
var reportid=r.BOReportID
var parms=r.parms
var parmslength=Object.keys(parms).length
var parmstring=“”
对于(i=0;i0){
parmstring=parmstring+“|名称:“+parmname+”,“+”值:“+parmvalue”
}
否则{
parmstring=parmstring+“名称:”+parmname+“,“+”值:”+parmvalue
}
}
//将crystal报告呈现为PDF文件。
var PDFCreateUrl=“/odata/PDFReport”
PDFCreateAjaxRequest(“post”,PDFCreateUrl,{ReportID:ReportID,ParmString:ParmString})
.完成(功能(结果){
ReportPdfPath.push(结果值)
})
.fail(函数(jqXHR、textStatus、errorshown){
});
函数PDFCreateAjaxRequest(类型、url、数据){
变量选项={
数据类型:“json”,
contentType:“应用程序/json”,
类型:类型,
data:data?JSON.stringify(数据):null,
异步:false
};
返回$.ajax(url、选项);
}
}
其他的
{
var ReportID=r.ReportID
var fullpath=localStorage.getItem(“PDFServerPath”+ReportID)
ReportPdfPath.push(完整路径)
}
})
setItem(“reportPDFPaths”,reportPDFPaths)
}
同步XHR将阻止执行。考虑以异步方式编写这整个代码< PDFRIPONT/<代码>函数,这样就可以避免<代码>异步:false < />代码> ./P>为什么不发送一个(异步)请求中的所有报告?
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);
}