2012-07-28 85 views
2

我希望为Ajax请求序列化一些会话内容。一些与此类似:为Ajax序列化会话内容

var data = $.session("data").serialize(); 

正是出于这样的标准jQuery ajax功能:

$.ajax({ 
    type: "POST", 
    url: "script.php", 
    data: data, 
    success: function() { 
    ... 
    } 
}); 

serialize()只能对表单元素,所以我在寻找类似的东西。处理表示SESSION数据数组的表单中的数组的东西。

这样做是否存在或我必须使用foreach循环手动序列化POST友好字符串中的会话内容?

+0

'$ .session(“data”)'指的是什么?你使用插件和浏览器端'sessionStorage'?如果它是[jQuery-Session-Plugin](https://github.com/AlexChittock/JQuery-Session-Plugin/blob/master/jquery.session.js),我不知道'$ .session()。除非'$ .session('data')'本身就是一个对象/数组,因为它存储了序列化,所以serialize()'将执行任何操作。 – 2012-07-28 20:35:03

回答

1

主要的真正原因上使用这样的数据序列化功能是当它从多个源起源 - 如一个包含许多输入字段的表单元素。表单上的一个序列化命令将返回所有数据。

如果您已经有一些JavaSctipt变量持有您的“会话”数据,那么您可以简单地通过AJAX调用将它们作为对象发送 - 如果已经将所有数据都包含在一个变量中,则无需序列化数据。

如果您想传递某些服务器会话变量,那么您可能需要考虑以下方法 - 您可以使用json_encode()保存会话变量数据并将其编码为json对象。之后,你可以简单地通过回它到一个变量将它传递给你的JavaScript -

var sess_data = '<?php echo json_encode($_SESSION); ?>' ; 

然后,你可以传递变量与AJAX调用 - 无需序列化数据。

$.ajax({ 
    type: "POST", 
    url: "script.php", 
    data: sess_data, 
    success: function() { 
    ... 
    } 
}); 
+0

我认为OP正在使用[jQuery Session Plugin](https://github.com/AlexChittock/JQuery-Session-Plugin#readme)。 – 2012-07-28 20:30:58

0

对我来说这是一个不太清楚,如果它是一个数组或对象或任何东西,但你可以使用$.param这个。

从文档:

创建一个数组或对象的序列化表示,适用于在URL查询字符串或Ajax请求 使用。

-

var data = $.session("data"); 

$.ajax({ 
    type: "POST", 
    url: "script.php", 
    data: {data: $.param(data)}, 
    success: function() { 
    ... 
    } 
}); 

,并抓住它在PHP

parse_str($_POST['data'], $myVariable); 
+0

“将一组表单元素编码为一组名称和值。”我的会话数据不是表单元素。 – Steeven 2012-07-28 20:27:11

+0

在这种情况下,使用'$ .serialize()'的方法有什么改进?另一个问题是如何回答的? – 2012-07-28 20:31:48

+0

再仔细看看,你会看到'$ .session()',我相信它是一个使用'sessionStorage'工作的插件。我在下面的评论中要求澄清。 – 2012-07-28 20:36:54