6

会社のアプリケーションでかなり Ajax を多用した機能を開始しようとしています。私がしなければならないことは、ユーザーがページにいる数分ごとに Ajax コールバックを行うことです。

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

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

私は本当に、ページ上の単一のメソッドを呼び出すことができるようにしたいだけです。

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

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

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

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

4

9 に答える 9

6

空白のページを作成したくない場合は、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; }
        }

    }
于 2008-08-26T02:14:36.237 に答える
3

Asp.Net 2.0 で導入された ASP.Net コールバックを使用する必要があります。これはあなたが行く準備をするべき記事です:

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

編集:これも見てください: ICallback & JSON Based JavaScript Serialization

于 2008-08-26T02:36:41.177 に答える
3

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

コールバックがクライアント コードに埋め込まれていることを考えると、クエリ文字列または POST 要求のいずれかを取得するには、同等の決意を持つ人が必要になります。IE、彼らがfirebugを持っているなら、あなたも同様にめちゃくちゃです。

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

繰り返し要求/直接アクセスを処理するには、要求ごとに送信されるキーを生成します。おそらく、現在の時刻のハッシュ (ファジー、私は分単位で計算しますが、ネットワークの遅延のため秒単位ではありません) + クライアント IP です。

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

于 2008-08-26T03:21:00.183 に答える
2

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

于 2008-08-26T02:11:12.317 に答える
2

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

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

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

于 2008-08-26T02:45:38.003 に答える
1

ASP.NET 2.0のみを使用しているので、.ashxファイルを作成するAjaxProをお勧めします。あなたがしなければならないのはあなたのウェブサイトにAjaxPro.dllを引っ張るだけです。私はAjaxProを使用してアプリケーション全体を開発しましたが、非常にうまく機能していることがわかりました。シリアル化を使用して、オブジェクトを前後に渡します。

これは、簡単に使用する方法のサンプルにすぎません。

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.NETAjaxとも連携して機能し、クラスが[Serializable]としてマークされている場合は、クライアントからサーバーにC#オブジェクトを渡すことができます。

于 2008-08-26T13:59:54.700 に答える
1

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

$.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.NetAjax拡張機能はまったく必要ありません。

于 2009-12-24T13:40:23.757 に答える
-1

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

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

于 2008-08-26T02:18:51.453 に答える
-1

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

于 2008-08-26T02:19:21.797 に答える