为什么我的$ .ajax()JSON数据会像这样回发到服务器?

时间:2010-11-15 08:21:30

标签: javascript asp.net jquery ajax json

我在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解析器可以正确解析它吗?

4 个答案:

答案 0 :(得分: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?items =%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 , “姓名”: “萨利”}]'

运行2:default.aspx?items%5B0%5D%5Bid%5D = 1&amp; items%5B0%5D%5Bname%5D = Charles&amp; items%5B1%5D%5Bid%5D = 8&amp; items %5B1%5D%5Bname%5D =约翰&安培;项%5B2%5D%5Bid%5D = 13&安培;项%5B2%5D%5Bname%5D =萨利

items [0] [id] 1

items [0] [name] Charles

项目[1] [id] 8

项目[1] [姓名]约翰

items [2] [id] 13

项目[2] [姓名]莎莉

运行3:default.aspx?[object%20Object]

[object Object]

运行4:default.aspx?Charles = undefined&amp; John = undefined&amp; Sally = undefined

请求[“Charles”] ='undefined'

请求[“John”] ='undefined'

请求[“Sally”] ='undefined'

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

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

答案 2 :(得分:0)

来自JQuery AJAX Page

  

数据选项可以包含a   查询表单的字符串   key1 = value1&amp; key2 = value2,或者是map的地图   形式{key1:'value1',key2:   '值'}。如果使用后一种形式,   数据被转换为查询   发送之前的字符串。这个   处理可以绕过   将 processData 设置为 false

因此,您的JSON对象将转换为查询字符串。

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