当我的XMLHttpRequest达到状态2时,我正在尝试执行一段代码。我希望它处于状态2的原因是我不希望用户等待服务器的响应(I我想在此时重定向用户。)
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(这需要时间来完成)。对于客户端来说,调用会发生什么并不重要。我唯一想要的就是执行调用。所以基本上我想在这里获得速度。
我知道只要我重定向用户,代码就会停止运行。但是,应该对服务器进行调用(并发送出去)。
我错过了什么或做错了什么?
答案 0 :(得分: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;
}
}
在服务器上我启动了一个任务。在这个任务中,我执行long procces。在服务器将呼叫返回给用户之前,还需要一段时间。
当debuggin(在visual studio中)你可以看到任务在没有用户礼物的情况下运行。
注意:我将用户重定向到其他页面时,所有会话都已消失。