2010-11-15 55 views
0

我有一个项目清单中的JavaScript这样:

var list = { 
    { id: 1, name: 'Charles' }, 
    { id: 8, name: 'John' }, 
    { id: 13, name: 'Sally' } 
}; 

但是当我把它发布到这样的服务器:

$.ajax({ 
    url: '/Controller/ActionName', 
    data: { items: list } 
}); 

它到达这样的服务器:

items[0][id]=1&items[0][name]=Charles&items[1][id]=8&items[1][name]=John&items[2][id]=13&items[2][name]=Sally 

如何使用JSON符号(即使用大括号)来获得它!这样.NET解析器可以正确解析它?

+0

ü需要把它转换成字符串(JSON格式),然后将它张贴 – vinothkr 2010-11-15 08:23:50

+0

我如何做到这一点?我认为下面的'djch'试图在下面显示这个,但是使用'stringify',我假设它来自外部库。必须有内置到jQuery或JavaScript来做到这一点? – Jimbo 2010-11-15 08:40:32

+0

使用$ .post。 $ .ajax使用GET,这意味着没有请求主体。 JSON不能放入查询字符串中,它必须放在正文中。 – RPM1984 2010-11-15 09:05:51

回答

2

尝试:

$.ajax({ 
    url: '/Controller/ActionName', 
    data: { items: JSON.stringify(list) } 
}); 

我已经试过以下选项:

<script type="text/javascript"> 

    var list = [ 
    { id: 1, name: 'Charles' }, 
    { id: 8, name: 'John' }, 
    { id: 13, name: 'Sally' } 
]; 


    function run(){ 
     $.ajax({ 
      url: 'default.aspx', 
      data: { items: JSON.stringify(list) } 
     }); 

     return false; 

    } 

    function run2() { 
     $.ajax({ 
      url: 'default.aspx', 
      data: { items: list } 
     }); 
     return false; 

    } 

    function run3() { 
     $.ajax({ 
      url: 'default.aspx', 
      data: { items: list }, 
      processData: false 
     }); 
     return false; 
    } 

    function run4() { 
     $.ajax({ 
      url: 'default.aspx', 
      data: list 
     }); 
     return false; 
    } 
</script> 

运行1:Default.aspx的项目=%5B%7B%22id%22%3A1%2C %22name%22%3A%22Charles%22%7D%2C%7B%22id%22%3A8%2C%22name%22%3A%22John%22%7D%2C%7B%22id%22%3A13%2C%22name %22%3A%22Sally%22%7D%5D

Querystring [“items”] ='[{“id”:1,“name”:“Charles”},{ “id”:8,“name”:“John”},{“id”:13,“name”:“Sally”}]'

运行2:default.aspx?items%5B0%5D% 5Bid%5D = 1 & items%5B0%5D%5Bname%5D = Charles & items%5B1%5D%5Bid%5D = 8 & items%5B1%5D%5Bname%5D = John & items%5B2%5D%5Bid% 5D = 13 &项%5B2%5D%5Bname%5D =萨利

项[0] [ID] 1

项[0] [名称]查尔斯

项[1] [ID ] 8

项[1] [名称]约翰

项[2] [ID] 13

项[2] [姓名]萨利

试验3:Default.aspx的[对象%20Object]

[对象的对象]

试验4:查尔斯的Default.aspx =未定义&约翰=未定义&萨利=未定义

请求[ “查尔斯”] = '未定义'

请求[ “约翰”] = '未定义'

请求[ “萨利”] = '未定义'

现在从OP,我认为运行1是必需的选项,因为他想在服务器端处理JSON字符串?

+0

谢谢,相当彻底的测试!这些也是我现在设法在服务器端获得的。您是否能够使用Run 1重新构建服务器端的数据?顺便说一句,你可以有这个帖子和http://stackoverflow.com/questions/4164114/posting-json-data-to-asp-net-mvc点,如果你成功了! :) – Jimbo 2010-11-15 10:23:17

0

从jQuery AJAX Page

数据选项可以包含形式 键1 =值&键2 =值,或地图上 形式{键的 查询字符串:“VALUE1” ,key2: 'value2'}。如果使用后一种形式,则 数据在发送之前会转换为查询 字符串。这 处理可以通过 设置过程数据

所以你的JSON对象转换为查询字符串被规避。

+0

我试着设置'processData:false',所有这些都是以某种方式神奇地发布NO数据。我希望我可以调试jQuery,但... – Jimbo 2010-11-15 08:36:07

0

使用$ .post()而不是$ .ajax(),它应该适合你。

$ .ajax执行GET请求,这就是为什么它将您的JSON转换为字符串并附加到查询字符串。

编辑: 它看起来像你正试图发布对象的列表,在这种情况下您var目录应该物体的像这样的数组:

var list = [ 
    { id: 1, name: 'Charles' }, 
    { id: 8, name: 'John' }, 
    { id: 13, name: 'Sally' } 
]; 


$.post({ 
    url: '/Controller/ActionName', 
    data: { "items": list } 
}); 
+0

我$ .ajax()有一个全局设置来强制POST,不幸的是仍然不能解决问题。 $ .post()也没有。这里的问题是jQuery如何序列化发布数据... – Jimbo 2010-11-15 09:07:44

+0

尝试'数据:列表'的参数为'$ .post' – RPM1984 2010-11-15 09:09:59

+0

@jimbo:试试我上面的编辑。 – ace 2010-11-15 09:11:56

1

我在我的手机,但你可以通过使用以下库将您的JSON对象转换为格式良好的JSON字符串来解决此问题。

jquery JSON project

图书馆仅3K的大小,也为您提供了额外的JSON功能,如解析等

一旦纳入您的网页上的脚本,然后您可以将对象转换为JSON字符串,使您的通话使用:

$.ajax({ 
     type: "POST", 
     url: '/Controller/ActionName', 
     cache: false, 
     data: $.toJSON(list), // Convert JSON object to String for Post 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
      GenerateResultsCallback(response.d) 
     }, 
     error: function (e) { 
      alert('error during ajax request'); 
     } 
    }); 
+0

+1感谢 - Google对他们的JSON内容非常坚实:) – Jimbo 2010-11-17 05:45:43

相关问题