質問

私の会社のアプリケーションで、かなり重い Ajax 機能を開始しようとしています。私が行う必要があるのは、ユーザーがページにアクセスしている数分ごとに Ajax コールバックを行うことです。

  • コールバックの前、後、またはコールバック中に DOM を更新する必要はありません。
  • ページからの情報は必要ありません。とにかくリクエストとともに常に送信されるサイト Cookie と ID 値だけが必要です。

私が知りたいのは、ページ上の残りの情報をポストバックせずに、ASP.NET ページへの JavaScript Ajax コールバックを作成するクリーンで簡単な方法があるかどうかです。できればそんなことはしたくないです。

本当に必要なのは、ページ上で 1 つのメソッドを呼び出すことだけで、他には何も呼び出すことができません。

また、ASP.NET 2.0 に制限されているため、2.0 フレームワークの ASP AJAX 拡張機能は使用できますが、新しい 3.5 フレームワークの ASP AJAX 機能は使用できません。

アップデート
受け入れることにしました ダンPの答えはまさに私が探しているもののようです。私たちのサイトではすでにいくつかの目的で jQuery を使用しているため、私の経験では ASP の AJAX フレームワークよりもパフォーマンスがはるかに優れていると思われるため、おそらくリクエストの作成には jQuery を使用することになるでしょう。

IHttpHandler にデータを転送する最良の方法は何だと思いますか?クエリ文字列に変数を追加するか、送信する必要があるデータを POST する必要がありますか?

送信する必要があるのは 1 つの ID だけだと思いますが、ID を送信して IHttpHandler に処理させる最適な方法がわかりません。基本的なコンピュータースキルを持つ人が誤ってまたは意図的にページに直接アクセスしたり、リクエストを繰り返したりすることを防ぐソリューションを考え出したいと考えています。これは可能でしょうか?

役に立ちましたか?

解決

空白のページを作成したくない場合は、IHttpHandler (ashx) ファイルを呼び出すことができます。

public class RSSHandler : IHttpHandler
    {
        public void ProcessRequest (HttpContext context)
        {   
            context.Response.ContentType = "text/xml";

            string sXml = BuildXMLString(); //not showing this function, 
            //but it creates the XML string
            context.Response.Write( sXml );
        }

        public bool IsReusable
        {
            get { return true; }
        }

    }

他のヒント

Asp.Net 2.0 で導入された ASP.Net コールバックを使用する必要があります。準備を整えるのに役立つ記事は次のとおりです。

ASP.NET Web ページでポストバックを使用せずにプログラムでクライアント コールバックを実装する

編集:これも見てください:ICallback および JSON ベースの JavaScript シリアル化

IHttpHandler にデータを転送する最良の方法は何だと思いますか?クエリ文字列に変数を追加するか、送信する必要があるデータを POST する必要がありますか?送信する必要があるのは 1 つの ID だけだと思いますが、ID を送信して IHttpHandler に処理させる最適な方法がわかりません。基本的なコンピュータースキルを持つ人が誤ってまたは意図的にページに直接アクセスすることを防ぐソリューションを考え出したいと考えています。

コールバックがクライアント コードに埋め込まれていることを考慮すると、クエリ文字列または POST リクエストを取得するには、同等の決意を持った人が必要になります。IE、彼らに Firebug がある場合、あなたも同様にひどいことになります。

したがって、その場合は、自分にとって最も簡単なことを何でもしてください (ヒント:クエリ文字列を使用するだけです)。

繰り返しのリクエストや直接アクセスを処理するには、リクエストごとに送信されるキーを生成します。おそらく、現在時刻 (あいまいですが、ネットワーク遅延のため秒単位ではなく、分単位まで下がります) + クライアント IP のハッシュです。

次に、HTTPHandler で同じハッシュを実行し、一致する場合にのみ実行します。

ASP.NET AJAX に限定されず、jQuery、YUI などのサードパーティ ライブラリを使用して同じことを行うことができます。その後、サイト上の空白のページにリクエストを送信するだけで、Cookie を含むヘッダーが返されます。

私の投票は HTTPHandler の提案にも賛成です。私はこれをよく利用します。ページ クラスのインスタンスを呼び出さないため、非常に軽量です。

ASP.NET AJAX フレームワークのトリックはすべて、実際には呼び出しごとにバックエンドでページ全体をインスタンス化して再作成するため、リソースを大量に消費します。

したがって、私の典型的なスタイルの XmlHttpRequest は HttpHandler に戻ります。

ASP.NET 2.0のみを使用しているため、お勧めします アヤックスプロ .ashx ファイルを作成します。必要なのは、AjaxPro.dll を Web サイトに取り込むことだけです。私はアプリケーション全体を開発しました アヤックスプロ そしてそれが非常にうまく機能することがわかりました。シリアル化を使用してオブジェクトをやり取りします。

これは、簡単な使用方法のサンプルです。

namespace MyDemo
{
  public class Default
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      AjaxPro.Utility.RegisterTypeForAjax(typeof(Default));
    }

    [AjaxPro.AjaxMethod]
    public DateTime GetServerTime()
    {
      return DateTime.Now;
    }
  }
}

JavaScript 経由で呼び出すには、次のように簡単です。

function getServerTime()
{
  MyDemo._Default.GetServerTime(getServerTime_callback);  // asynchronous call
}

// This method will be called after the method has been executed
// and the result has been sent to the client.

function getServerTime_callback(res)
{
  alert(res.value);
}

編集

も追加する必要があります

設定へ。AjaxPro は APS.NET Ajax と並行して動作し、クラスが [Serializable] としてマークされている場合は、C# オブジェクトをクライアントからサーバーに渡すことができます。

別の視点を提供するために、メイン ページで PageMethod を使用することもできます。Dave Ward が次のような素晴らしい投稿をしています 説明します これ。Dave の投稿に示されているように、基本的には jQuery ajax post を使用してメソッドを呼び出します。

$.ajax({
    type: "POST",
    url: "Default.aspx/GetFeedburnerItems",
    // Pass the "Count" parameter, via JSON object.
    data: "{'Count':'7'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      BuildTable(msg.d);
    }
  });

Asp.Net Ajax 拡張機能はまったく必要ありません。

asp.net ajax ライブラリに組み込まれている WebMethods を使用することもできます。ページのコードビハインドで静的メソッドを作成し、それを Ajax から呼び出すだけです。

それを行う方法のかなり基本的な例があります ここ

Web サービス (.asmx) を使用する必要があります。Microsoft の ASP.NET AJAX を使用すると、スタブを自動生成することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top