5

(質問は 2 つの返信投稿の助けを借りて解決されました。以下を参照してください)

ブラウザー (JavaScript/JQuery を使用) と ASP.NET (Visual Studio 2010 を使用) の間で JSON データを交換する簡単な例を教えていただければ幸いです。

ボタンをクリックすると、以下が実行されます。

 <script type="text/javascript">
    bClick = function () {
        var myData = { "par": "smile" };
        alert("hi "+myData.par);
        $.ajax({
            url: "ericHandler.ashx",
            data: myData,
            dataType: 'json',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            success: function (data) { alert("DIDit = " + data.eric); },
            error: function (data, status, jqXHR) { alert("FAILED:" + status); }
        });
    }
</script>

Visual Studio には、次のコードが ashx ファイルに関連付けられています。それを実行してボタンをクリックすると、C# コードに渡された myData が表示されないことを除いて、すべてが期待どおりに機能します。デバッガーで context.Request.QueryString を見ていると、「{}」が表示されます。

を使用した例を見てきました

string stringParam = (string)Request.Form("stringParam");

しかし、Visual Studioの「リクエスト」は定義されていないようです。私がやりたいのは、データが双方向に移動するのを見ることだけです。どんな助けでも大歓迎です。

--C#コード--

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace CSASPNETSerializeJsonString
{
/// <summary>
/// Summary description for ericHandler
/// </summary>
public class ericHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string rq = context.Request.QueryString["par"];

        context.Response.ContentType = "application/json";
        context.Response.Write("{\"eric\":\"12345\"}");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

}

*解決済み まず、JavaScript から ASP.NET にいくつかのフォーム パラメーターを送信する場合は、以下の 2 番目の投稿で ajax 呼び出しを使用し、データに対して stringify を使用しないでください。つまり、送信されるデータが json であると指定されていない場合、指定がない場合、デフォルトで 'application/x-www-form-urlencoded' になります)。これにより、オブジェクトのフィールドが「url」形式 (field=X&field2=Y&field3=Z..) で追加され、Request.Form["field"] を使用して ASP.NET に表示されます。

第二に、本当に JSON データを送信したい場合は、このタイプが送信されるものであることを指定し (上記で行ったように)、受信側で InputStream を使用します。フィールド値を取得するには、受信した文字列をさらに解析する必要があります。

私の例では、JSON データを「手動で」文字列にエンコードして送り返しています。C# オブジェクトを送信できるように、JSON シリアライゼーション ルーチンがあると思います。

4

2 に答える 2

5

contentType: 'application/json; charset=utf-8',他のリソースは、AJAX 呼び出しからを削除することを提案しています。

  $.ajax({ 
            url: "ericHandler.ashx", 
            data: myData, 
            dataType: 'json', 
            type: 'POST', 
            success: function (data) { alert("DIDit = " + data.eric); }, 
            error: function (data, status, jqXHR) { alert("FAILED:" + status); } 
        }); 

サーバー側で値を読み取ります。

string myPar = context.Request.Form["par"]; 

あなたも試すことができます:

string json = new StreamReader(context.Request.InputStream).ReadToEnd(); 

ここで言及されました:https://stackoverflow.com/a/8714375/139917

于 2012-06-29T23:03:22.730 に答える
3

私はこれをすぐに機能させました。これは最も基本的な形式です:

HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

    <script language="javascript" type="text/javascript">
        $(document).ready(function () {
            $.ajax({
                url: 'Handler.ashx',
                type: 'POST',
                success: function (data) {
                    alert(data);

                },
                error: function (data) {
                    alert("Error");
                }
            });
        });
    </script>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

    </form>
</body>
</html>

コードビハインド:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
于 2012-06-29T22:44:12.463 に答える