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 に答える