【问题标题】:How to convert an object to the serialized syntax for data in jquery.ajax function?如何将对象转换为 jquery.ajax 函数中数据的序列化语法?
【发布时间】:2011-06-10 16:51:38
【问题描述】:

我有一个对象,我想用我的 jquery.ajax 函数发送,但我找不到任何东西可以将它转换成我需要的序列化格式。

$.ajax({
  type: 'post',
  url: 'www.example.com',
  data: MyObject,
  success: function(data) {
    $('.data').html(data)
  }
})

MyObject = [
  {
    "UserId": "2",
    "UserLevel": "5",
    "FirstName": "Matthew"
  },
  {
    "UserId": "4",
    "UserLevel": "5",
    "FirstName": "Craig"
  }
]

Serialized_format = [
  {
    "name": "UserId",
    "value": "5"
  },
  {
    "name": "UserLevel",
    "value": "4"
  },
  {
    "name": "FirstName",
    "value": "Craig"
  }
]

【问题讨论】:

  • 哼...你需要的序列化格式是什么? MyObject 是什么样的?含义:什么拥有什么想要?如果你想要 JSON,那么它只是 JSON.stringify(MyObject) (你可能必须将它分配给一个参数,所以 "parameter=" + JSON.stringify(...)" )。
  • 你在服务器端使用什么语言?
  • PHP,我按照上面的方式尝试了该对象,但当我执行 print_r($_POST) 时它只是未定义。所以我用序列化格式尝试了相同的信息,它工作了
  • 您的“序列化”版本(顺便说一句它不是序列化的)没有意义。是否存在映射?

标签: jquery ajax json serialization


【解决方案1】:

所以我会把我的评论作为答案。如果要将数组传输到服务器端,可以将其转换为 JSON(至少这是 imo 最简单的方法)。

使用JSON:

$.ajax({
  type: 'post',
  url: 'www.example.com',
  data: {paramter: JSON.stringify(MyObject)},
  success: function(data) {
    $('.data').html(data)
  }
});

其中parameter 是您要使用的 POST 参数的名称。

JSON.stringify 会给你一个类似的字符串:

'[{"UserId":"2","UserLevel":"5","FirstName":"Matthew"},{"UserId":"4","UserLevel":"5","FirstName":"Craig"}]'

在服务器端检索,例如使用 PHP 和 json_decode:

$data = json_decode($_POST['parameter']);

会给你一个对象数组:

Array
(
    [0] => stdClass Object
        (
            [UserId] => 2
            [UserLevel] => 5
            [FirstName] => Matthew
        )

    [1] => stdClass Object
        (
            [UserId] => 4
            [UserLevel] => 5
            [FirstName] => Craig
        ) 
)

我还建议将MyObject 重命名为反映变量内容的有意义的名称。事实上,你有一个数组,而不是一个对象(是的,我知道数组也是对象)。

【讨论】:

    【解决方案2】:

    您不需要序列化,类型为“post”的 .ajax 将“MyObject”的属性(如 html POST)发送到您的脚本中的“url”参数。

    例如,在 PHP 中: 使用:

    $.ajax({
      type: 'post',
      dataType: 'json',
      url: 'www.example.com/receive.php',
      data: {
          param1: 'test',
          param2: 123456
      },
      success: function(data) {
        $('.data').html(data)
      }
    })
    

    在receive.php 我有$_POST['param1']$_POST['param2']

    【讨论】:

    • 如何在 url 中将属性作为 html 帖子发送?
    • 数据将在请求正文中发送,而不是附加到 URL。那就是 GET。
    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 2018-10-05
    • 1970-01-01
    • 2020-12-19
    • 2014-06-10
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多