0

実行時間の長い Web サービスを呼び出すページに対して Ajax 呼び出し (XMLHttpRequest) を行うクライアント側のクリック イベントを持つ ASP.net Web フォーム アプリケーションがあります。

流れは次のようになります。

Page1.aspx が Page2.aspx を呼び出すリンクをクリックする

Page2.aspx はデリゲートと IAsyncResult を使用して WebService.asmx を呼び出します。

WebService.asmx は、拡張された BackgroundWorker を使用して別のスレッドで作業を行います

IAsyncResult は BeginInvoke() を呼び出し、次に EndInvoke() を呼び出します。

問題: Page1.aspx のリンクをクリックすると、最初は問題なく動作します。ページ 1 がページ 2 を呼び出し、ページ 2 が Web サービスを呼び出すと、作業が完了します。

(WebService の作業が完了した後で) リンクをもう一度クリックすると、Page2.aspx が呼び出すはずの作業が開始されません。

デバッグすると、Page1.aspx から XMLHttpRequest.send() 要求が呼び出されたことを示す Javascript アラートが表示されます。ただし、デバッガーは Page2.aspx ページに移動しません...実際、どこにも移動しません。

以下は、私の Ajax 関数の内部です: var xmlhttp = null;

if (window.XMLHttpRequest) {
     xmlhttp = new XMLHttpRequest();
}
else {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET", "Page2.aspx?SomeQueryString=" + someID, true);
xmlhttp.send();

xmlhttp.onreadystatechange = function () {               
   if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        try {
            var responseText = xmlhttp.responseText;
            document.getElementById("_lblExportStatus").innerHTML = responseText;
        }
        catch (e) {
             alert("Error: " + e.Message);
        }
   }
}
return false;

編集 XMLHttpRequest オブジェクトに別のクエリ文字列を渡すと、作業が行われることがわかりました。問題は、Open() メソッドでまったく同じ文字列を渡すことです。open() メソッドに異なる文字列を送信すると、問題なく動作します。

4

2 に答える 2

0

それでも機能しない場合は、GETの代わりにPOSTを使用してみてください。

jQuery を使用して、ASP.NET AJAXページ メソッドを直接呼び出すか、Web サービスを直接呼び出すことができます。

 $.ajax({
 type: "POST",
 url: "Page2.aspx?SomeQueryString=" + someID, true);
 data: "{}",
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function(msg) {
  // Do something interesting here.
 }
 });

リンク: [詳細]

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

お役に立てれば

よろしく

シャズ

于 2013-08-01T15:03:21.210 に答える