2

json値をaspページに渡そうとするHTMLファイルを作成しましたが、aspでエラーが発生します。私のHTMLは正常に機能し、値{'a':'a'、'b':'b'}を渡しますが、aspページは値を使用できませんでした。

  1. これが私のHTMLコードで、JSON値を示しています{'a':'a'、'b':'b'}:

      <html>
      <head>
      <title></title>
    
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
      <script type="text/javascript"> 
    
        $(document).ready(function() {
        $('#btnAdd').click(function() { 
    
    
            var json_obj = "{'" + $('#t1').val() + "' : '" + $('#p1').val() + "','" + $('#t2').val() + "' : '" + $('#p2').val() + "'}"; 
    
    
            $.ajax({ 
                type: 'POST', 
                url: 'http://localhost/Base_Data/InsertItem.aspx', 
                contentType: 'application/json; charset=utf-8', 
                data: json_obj, 
                dataType: 'json', 
                success: function(msg) { 
                    alert('Success!'); 
                }, 
                error: function(msg) { 
                    alert('Error!'); 
                } 
            }); 
        }); 
      }); 
      </script> 
      </head>
      <body>
    
    <div> 
    Type: 1: <input type="text" id="t1" /> 
    Property 1: <input type="text" id="p1" /> 
    
    Type 2: <input type="text" id="t2" /> 
    Property 2: <input type="text" id="p2" /> 
    <input type="button" id="btnAdd" value="Add object!" /> 
    
    </div> 
    
    </body>
    </html>
    
  2. これが私のASPページコードの背後にあります:

    public class Test
    {
    public Test(string json)
    {
    
        var serializer = new JavaScriptSerializer();
        var result = serializer.DeserializeObject(json);
    
        var first = int.Parse(result["t1"]);
        var second = int.Parse(result["t2"]); 
     }
    
      public string first { get; set; }
      public string second { get; set; }
     }
    

返信をいただければ幸いです。前もって感謝します!

4

2 に答える 2

0

$.ajaxメソッドにデータを渡す場合、dataパラメーターは通常、キーと値のペアを持つjavascriptオブジェクトであり、これらのキーと値のペアは、のようにクエリ文字列に入れられますfoo=bar&person=ted。そこにJSON文字列を入れて、サーバーでそのJSONを解析しようとするのは、サーバーにいくつかの値を送信するのが難しい方法であり、サーバーでそれを解析するのもはるかに手間がかかります。

メソッドの組み込みデータ機能を使用する$.ajaxと、データがクエリ文字列形式になり、サーバーはそれを自動的に解析することもできます。すべて、クライアントやサーバーに新しいコードを記述する必要はありません。

jQueryドキュメントから:

データ

サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。GETリクエストのURLに追加されます。この自動処理を防ぐには、processDataオプションを参照してください。オブジェクトはキー/値のペアである必要があります。値が配列の場合、jQueryは、従来の設定(以下で説明)の値に基づいて、同じキーで複数の値をシリアル化します。

于 2012-09-04T08:55:51.433 に答える
0

常に問題が発生する可能性があるため、純粋な JSON を手動で生成することは避けます。JSON.stringifyなどを使用すると、適切な JS オブジェクトを使用できるため、データの構築が容易になります。

var jsonObj = { t1: $('#t1').val(), p1: $('#p1').val(), t2: $('#t2').val(), p2: $('#p2').val() };

$.ajax({  
    type: 'POST',  
    url: 'http://localhost/Base_Data/InsertItem.aspx',  
    contentType: 'application/json; charset=utf-8',  
    data: JSON.stringify(jsonObj),  
    dataType: 'json',  
    success: function(msg) {  
        alert('Success!');  
    },  
    error: function(msg) {  
        alert('Error!');  
    }  
}); 

次に、サーバー側で json をdynamicオブジェクトに逆シリアル化し、データを元に戻します。

public Test(string json)  
{  
    var serializer = new JavaScriptSerializer();  
    var result = serializer.Deserialize<dynamic>(json);  

    var first = int.Parse(result["t1"]);  
    var second = int.Parse(result["t2"]);   
}

アップデート

あなたのコメントに基づいて、オブジェクトを使用することはできません.JSONを例えばdynamicに逆シリアル化できるはずです.Dictionary

var result = serializer.Deserialize<Dictionary<string, string>>(json);
于 2012-09-04T09:32:12.773 に答える