ASP.NET jQuery和Web服务出现问题';s法

ASP.NET jQuery和Web服务出现问题';s法,asp.net,jquery,Asp.net,Jquery,我异步调用WebService方法 虽然该方法不完整,但我使用该jQuery代码来更新我的进度条(从该Web服务获取进度值) var intervalID=setInterval(updateProgress,1000); 函数updateProgress(){ $.ajax({ 键入:“获取”, url:“myPage.aspx/GetProgress”, 数据:“{}”, contentType:“应用程序/json;字符集=utf-8”, 数据类型:“json”, async:true,

我异步调用WebService方法

虽然该方法不完整,但我使用该jQuery代码来更新我的进度条(从该Web服务获取进度值)

var intervalID=setInterval(updateProgress,1000);
函数updateProgress(){
$.ajax({
键入:“获取”,
url:“myPage.aspx/GetProgress”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
async:true,
成功:功能(msg){
$(“#结果”).text=msg.d;
var值=$(“#progressbar”).progressbar(“期权”、“价值”);
如果(值<100){
$(“#progressbar”).progressbar(“值”,msg.d);
$(“#结果”).text(msg.d);
}
否则{
clearInterval(intervalID);
}
}
});
问题是,浏览器发送请求(比方说15次)以获取进度值,但在异步方法完成时,请求正在等待。然后,我的服务器为浏览器发送15次该值

为什么请求等待完成异步方法???

设置时,您告诉请求按顺序完成,并在执行此操作时锁定浏览器。如果希望UI更新,则需要设置超时而不是间隔,以便UI有时间在请求之间更新,但这样会更好要完全关闭
async
并使用,我的意思如下:

function updateProgress() {
    $.ajax({
        type: "GET",
        url: "myPage.aspx/GetProgress",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            $("#result").text = msg.d;
            var value = $("#progressbar").progressbar("option", "value");
            if (value < 100) {
                $("#progressbar").progressbar("value", msg.d);
                $("#result").text(msg.d);
            }
            else {
                setTimeout(updateProgress, 1000);
            }
        }
    });
}
函数updateProgress(){
$.ajax({
键入:“获取”,
url:“myPage.aspx/GetProgress”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
$(“#结果”).text=msg.d;
var值=$(“#progressbar”).progressbar(“期权”、“价值”);
如果(值<100){
$(“#progressbar”).progressbar(“值”,msg.d);
$(“#结果”).text(msg.d);
}
否则{
设置超时(updateProgress,1000);
}
}
});
}
这可以让请求完成,而不会锁定浏览器或UI线程,并在第一个请求完成时启动下一个请求,延迟1000毫秒,如果需要可以调整。否则,假设用户有1200毫秒的延迟,目前您正在排队等待重叠的请求……最好不要在重复的AJAX情况下使用,因为您不会这样做知道请求本身需要多长时间。

设置请求时,您告诉请求按顺序完成,并在执行此操作时锁定浏览器。如果希望UI更新,则需要设置超时而不是间隔,以便UI有时间在请求之间更新,但最好关闭altogeth呃,改用,我的意思是:

function updateProgress() {
    $.ajax({
        type: "GET",
        url: "myPage.aspx/GetProgress",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            $("#result").text = msg.d;
            var value = $("#progressbar").progressbar("option", "value");
            if (value < 100) {
                $("#progressbar").progressbar("value", msg.d);
                $("#result").text(msg.d);
            }
            else {
                setTimeout(updateProgress, 1000);
            }
        }
    });
}
函数updateProgress(){
$.ajax({
键入:“获取”,
url:“myPage.aspx/GetProgress”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
$(“#结果”).text=msg.d;
var值=$(“#progressbar”).progressbar(“期权”、“价值”);
如果(值<100){
$(“#progressbar”).progressbar(“值”,msg.d);
$(“#结果”).text(msg.d);
}
否则{
设置超时(updateProgress,1000);
}
}
});
}

这可以让请求完成,而不会锁定浏览器或UI线程,并在第一个请求完成时启动下一个请求,延迟1000毫秒,如果需要可以调整。否则,假设用户有1200毫秒的延迟,目前您正在排队等待重叠的请求……最好不要在重复的AJAX情况下使用,因为您不会这样做知道请求本身需要多长时间。

那么您建议用什么代替setInterval()来检查进度?@Tony-什么不起作用?“它不起作用”这不是一个非常有用的描述,请具体说明什么是/不起作用的:)好的,我在UpdatePanel控件中有FileUpload控件和按钮。选择一个文件并单击该按钮后,导入开始,我看到回发正在处理中。当浏览器发送进度请求时,然后获取它们postback@Tony-文件上载不能是异步的,它必须通过iframe或其他机制进行上载…XmlHttpRequest无法上载文件(希望是出于明显的安全原因)。它实际上是如何发送文件的?那么,您建议使用什么来改为setInterval()来检查进度?@Tony-什么不起作用?“它不起作用”这不是一个非常有用的描述,请具体说明什么是/不起作用的:)好的,我在UpdatePanel控件中有FileUpload控件和按钮。选择一个文件并单击该按钮后,导入开始,我看到回发正在处理中。当浏览器发送进度请求时,然后获取它们postback@Tony-文件上载不能是异步的,它必须通过iframe或其他机制进行上载…XmlHttpRequest不能上载文件(出于明显的安全原因)。它实际上是如何发送文件的?