Javascript 可以使用XMLHttpRequest跟踪代码隐藏中的大型SQL更新循环吗
我允许最终用户上传一个文件,然后读取到内存中,并通过它循环更新数据。我想知道一种方法可以将我在C#中执行的SQL循环的进度报告回UI,就像我们在上传文件时所做的那样。我们使用ajaxpost,然后逐行读取,所以当进行较大的读取时,我需要一个我们已读取的行数的进度状态。这是可能的,还是只适用于文件的上传/下载流 下面是进行文件上传的ajax调用,在等待ajax返回响应时,文件进度对于正在上传的文件非常有效,但对于循环跟踪却没有效果Javascript 可以使用XMLHttpRequest跟踪代码隐藏中的大型SQL更新循环吗,javascript,jquery,ajax,xmlhttprequest,Javascript,Jquery,Ajax,Xmlhttprequest,我允许最终用户上传一个文件,然后读取到内存中,并通过它循环更新数据。我想知道一种方法可以将我在C#中执行的SQL循环的进度报告回UI,就像我们在上传文件时所做的那样。我们使用ajaxpost,然后逐行读取,所以当进行较大的读取时,我需要一个我们已读取的行数的进度状态。这是可能的,还是只适用于文件的上传/下载流 下面是进行文件上传的ajax调用,在等待ajax返回响应时,文件进度对于正在上传的文件非常有效,但对于循环跟踪却没有效果 var form = $('#FormUpload')[0];
var form = $('#FormUpload')[0];
var dataString = new FormData(form);
$("#cboxClose").trigger("click");
$.ajax({
url: '/Uploader/Upload', //Server script to process data
type: 'POST',
xhr: function () { // Custom XMLHttpRequest
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) { // Check if upload property exists
//myXhr.upload.onprogress = progressHandlingFunction
myXhr.upload.addEventListener('progress', progressHandlingFunction,
false); // For handling the progress of the upload
}
return myXhr;
},
//Ajax events
success: uploadSuccessHandler,
error: uploadErrorHandler,
//complete: completeHandler,
// Form data
data: dataString,
//Options to tell jQuery not to process data or worry about content-type.
cache: false,
contentType: false,
processData: false
});
}
这里是我调用的MVC中的C#控制器的一部分,但是为了解决这个问题,我对逻辑进行了限制并使其具有一般性
try
{
if (uploadedFile != null && uploadedFile.ContentLength > 0)
{
if (uploadedFile != null)
{
if (uploadedFile.ContentLength > 0)
{
using (StreamReader sr = new StreamReader(uploadedFile.InputStream))
{
string currentLine;
int counterLine = 0;
// currentLine will be null when the StreamReader reaches the end of file
while ((currentLine = sr.ReadLine()) != null)
{
if (counterLine > 0)
{
String fixedLine = currentLine;
if (currentLine.Contains("/"))
{
fixedLine = currentLine.Remove('/');
}
string[] columns = fixedLine.Split(',');
quoteDataRows.Add(new QuoteEntityItemVM()
{
Manufacturer = columns[0],
Model = columns[2],
Description = columns[1],
LineID = lineCountId += 1
});
}
counterLine += 1;
}
}
}
}
有没有一种方法可以使用现代AJAX不仅显示uplaod的进度,而且当计数器循环向UI报告进度时,比如(“行读取(n)的总行(n)”返回UI,或者这是不可能的
-谢谢-您可以向api发送请求,以检查已读取的行数。或者您可以配置websocket。如果它处于不同的调用中,我如何向api发送请求并报告?您可以提供基本示例吗?这可能是直截了当的,我对此有些过火。实际上,我喜欢websocket方法,但忘记了现在在HTML5中使用它。谢谢,我会尝试一下。如果我解决了它,我会发布答案。我不确定如何使用web套接字示例将整数计数发送回UI。我看到您使用上下文进行构造,但如何将其馈送到“消息”事件在我的c#循环中写回套接字?不幸的是,c#超出了我的范围,在java中,您将从当前会话调用一个对象来传递消息,它在c#中应该类似。您应该看看官方文档。