在代码后面使用AJAX错误传递json对象

时间:2012-09-04 08:53:34

标签: c# javascript asp.net ajax json

我创建了一个HTML文件,它会尝试将json值传递给我的asp页面,但是我的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; }
     }
    
  3. 任何回复都将受到高度赞赏。提前谢谢!

2 个答案:

答案 0 :(得分:0)

将数据传递给$.ajax方法时,data参数通常是具有键/值对的javascript对象,并且这些键/值对被放入查询字符串中,如{{1} }。将JSON字符串放在那里,然后尝试在服务器中解析该JSON是向服务器发送几个值的难点,并且在服务器上解析它也需要做更多的工作。

使用foo=bar&person=ted方法的内置数据功能会将数据放入查询字符串格式,您的服务器也可以自动解析 - 无需在客户端或服务器上编写任何新代码。

来自jQuery docs

  

数据

     

要发送到服务器的数据。它被转换为查询字符串,   如果还不是一个字符串。它附加到GET请求的URL。   请参阅processData选项以防止此自动处理。宾语   必须是键/值对。如果value是一个数组,jQuery序列化   具有相同键的多个值基于传统的值   设置(如下所述)。

答案 1 :(得分: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"]);   
}

<强>更新

根据您的评论,您将无法使用dynamic对象,您应该能够将您的JSON反序列化为Dictionary,例如

var result = serializer.Deserialize<Dictionary<string, string>>(json);