3

当我的 XMLHttpRequest 达到状态 2 时,我正在尝试执行一段代码。我希望它处于状态 2 的原因是我不希望用户等待服务器的响应(我想此时重定向用户)。

    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
       xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function () {  
     if (xmlhttp.readyState == 2) {
        window.location.href = urlFromPreviousAjaxcall;
      }
    }
    xmlhttp.open("POST", "url", true);
    xmlhttp.send();

然而,if(xmlhttp.readyState == 2) 中的代码块只会在服务器处理完调用后立即被调用。这部分必须在调用后立即执行(无需服务器等待)。

在文档中,我发现一旦发送呼叫,就会达到状态 2。然而事实并非如此。


更新:

我试图拨打的电话涉及在服务器上调用 Api(这需要时间才能完成)。对于客户来说,调用发生了什么并不重要。我唯一想要的是调用被执行。所以基本上我想在这里加快速度。

我知道一旦我重定向用户,代码就会停止运行。但是,应该已经对服务器进行了调用(并发送出去)。

我错过了什么或做错了什么?

4

1 回答 1

0

谢谢大家的帮助。

我找到了解决方案:

[HttpPost]
public void methode(String parameter,String parameter)
    {           
        Task.Factory.StartNew<string>(() => RunTask(accessToken, parameter, parameter));            
    }

private string RunTask(String parameter, String parameter)
    {
        try
        {
            // Code to execute here
            return "Done!";
        }
        catch (Exception e)
        {
            return "Error: " + e.Message;
        }
    }

在服务器上我开始了一个任务。在这个任务中,我执行长过程。在服务器将调用返回给用户之前仍然需要很短的时间。

调试时(在 Visual Studio 中),您可以看到任务正在运行而没有用户的存在。

注意:当我将用户重定向到另一个页面时,所有会话都消失了。

于 2013-11-06T12:00:49.310 回答