2012-03-28 110 views
4

我试图通过AJAX将动态的,用户创建的对象传递给一些C#。我对JSON并没有太多的经验,但它似乎是一个很好的方法。我不知道为什么,但它给我在对象声明上的错误。 (据说)。我在做什么错了?谢谢。尝试使用AJAX和JQuery将JSON对象传递给C#

编辑:它似乎只在IE中的错误,但我需要它在IE7中工作。

网页错误的详细信息

用户代理:Mozilla的/ 4.0(兼容; MSIE 7.0; Windows NT的6.1; WOW64; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0。 30729;媒体中心PC 6.0; .NET4.0C; .NET4.0E; MDDC; InfoPath.2) 时间戳:星期三,2012年3月28日14时15分十九秒UTC

消息:预期标识符,字符串或数字 行:18 Char:21 代码:0 URI:http://localhost:56560/Default.aspx

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
     <script type="text/javascript"> 
     $(function() { 

      $('input[type=button').click(function(){ 

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

       $.ajax({ 
        typeof: "POST", 
        url: '/test.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" value="Add object!" /> 
    </div> 
</body> 
</html> 

代码隐藏

public class Test 
{ 
    public Test(string json) 
    { 
     JObject jObj = JObject.Parse(json); 
     JToken jUser = jObj["json_obj"]; 
     first = (string)jObj["t1"]; 
     second = (string)jObj["t2"]; 
    } 

    public string first { get; set; } 
    public string second { get; set; } 
} 
+1

什么对象的宣言?发布更详细的错误描述以及您需要帮助的地方。 – SkonJeet 2012-03-28 14:12:29

回答

2

我觉得你JSO的格式n数据错误。试试这个:

var json_obj = "{'" + $('#t1').val() + "' : '" + $('#p1').val() + "', '" + $('#t2').val() + "' : '" + $('#p2').val() + "'}"; 
+0

这是JSON的字符串表示形式。这不是JSON _object_, – 2013-08-15 04:53:37

+2

或......他可以将json对象包装为JSON.stringify(json_obj)。这会更安全 – 2013-08-15 07:49:55

0

你可以在你的C#代码添加的功能,如:

[HttpPost] 
public JsonResult Test() 
{ 
    return Json(new {Success = true, CustomJSONAttribute="Whatever You Like"}); 
} 

然后调整JQuery的阿贾克斯测试(点),然后在你的成功的功能你可以这样做:

msg.Success和msg.CustomJSONAttribute

0

为了什么是值得的,我一直在为此奋斗了几个小时。我最终通过确保我的$ .ajax调用中的JSON对象/ var与C#中的参数名称匹配来解决缺少的参数问题。我真的不能相信这是问题所在。

[WebMethod] 
    public static void SetSession(String **json**) 
    { 
     String s = json; 
    } 

...

var json_obj = "{'" + '**json**' + "' : '" + 'the_val' + "'}"; 
       $.ajax({ 
        type: "POST", 
        url: "my_page.aspx/SetSession", 
        data: json_obj, 
        contentType: "application/json; charset=utf-8", 
        dataType: 'json', 
        success: function() 
        { 
         alert('SetSession executed.'); 
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) 
        { 
         alert("Status: " + textStatus); alert("Error: " + XMLHttpRequest.responseText); 
        } 
       });