答案 0 :(得分:6)
jQuery的serialize / serializeArray仅适用于表单元素。我认为你正在寻找更通用的东西:
http://code.google.com/p/jquery-json/
这个插件可以很容易地转换为JSON:
var thing = {plugin: 'jquery-json', version: 2.2}; var encoded = $.toJSON(thing); //'{"plugin":"jquery-json","version":2.2}' var name = $.evalJSON(encoded).plugin; //"jquery-json" var version = $.evalJSON(encoded).version; // 2.2
大多数人问我为什么要这样做 做这样的事情,让我难以置信 心神。 Javascript使它相对 很容易转换为JSON,多亏了 eval(),但转换为JSON是 据说是边缘要求。
此插件公开了四个新功能 到$或jQuery对象:
toJSON
:将javascript对象,数字,字符串或arry序列化为JSON。evalJSON
:快速从JSON转换为Javascript,并且非常简单。secureEvalJSON
:从JSON转换为Javascript,但是在检查源是否实际上是JSON时是这样做的,而不是引入其他Javascript语句。quoteString
:在字符串周围放置引号,并以任意方式转义任何引号,反斜杠或控制字符。
答案 1 :(得分:3)
为什么,是的:jQuery's serialize。要反序列化,你必须自己编写一个函数,基本上将字符串拆分为& s,然后是='s。
答案 2 :(得分:2)
我试图序列化一个表单然后保存它,当用户返回到表单时,将其反序列化并重新填充数据。事实证明,有一个非常甜蜜的jQuery插件已经执行此操作:jQuery autosave。也许这会帮助你们中的一些人。
答案 3 :(得分:1)
我个人喜欢Chris'unserialize函数来处理jQuery的序列化字符串,但是,不要忘记在服务器端将urldecode()作为数据,例如'email'=>如果您按原样使用该功能,'me%40domain.com'将会进入。
更新:
function _unserializeJQuery($rubble = NULL) {
$bricks = explode('&', $rubble);
foreach ($bricks as $key => $value) {
$walls = preg_split('/=/', $value);
$built[urldecode($walls[0])] = urldecode($walls[1]);
}
return $built;
}
答案 4 :(得分:1)
答案 5 :(得分:1)
按照变量“formdata”查看支持代码,了解如何在wordpress环境中使用它。
我在客户端(js)使用它:
// bind button, setup and call .ajax
jQuery('#submitbutton').click(function() {
jQuery('#response_area').html('');
// put all name-values from form into one long string
var serializedformdata = jQuery('#submitform').serialize();
// configure array of options for the ajax call (can use a different action for each form)
options = {
type: 'POST',
url: sv_submitform_global_js_vars.ajaxurl,
datatype: 'json',
data: {
clienttime: getnow(),
sv_submit_form_check: jQuery('#sv_submit_form_check').val(),
// this data:action:'value' is specifically required by the wordpress wp_ajax_<value> action hook to process the received data on the php/server side
action: 'sv_submitform_hook',
formdata: serializedformdata,
},
beforeSend: beforesendfunc,
// process returned json formatted data in function named below
success: successfunc,
}
// execute the ajax call to server (sending data)
jQuery.ajax(options);
});
...这是在服务器端(PHP)将数据恢复出来并进入一个很好的关联数组,用于服务器端数据库工作。
/////////////////////////////////////
// ajax serverside data handler ///
/////////////////////////////////////
// Add AJAX actions for submit form
// Serves logged in users
add_action( 'wp_ajax_sv_submitform_hook', 'sv_submitform_handler' );
// Serves non-logged in users
add_action( 'wp_ajax_nopriv_sv_submitform_hook', 'sv_submitform_handler' );
// this is the function that processes the input from the submit form
function sv_submitform_handler(){
date_default_timezone_set('EST');
$servertime = date('h:i:s a').' Server Time';
// fda = form data array can be used anywhere after the next statement.
// example: if ($fda['formfieldbyname'] == 'something'){...};
parse_str($_POST['formdata'],$fda);
// this is how the nonce value is read
// form side is wp_nonce_field('sv_submitform','sv_submitform_check');
if (!check_ajax_referer('sv_submitform', 'sv_submitform_check', false )){
$data = $servertime . ' (Security Failed)';
} else {
$data = $servertime . ' (Security Passed)';
};
$returndata = array('data' => $data);
exit(json_encode($returndata));
};
对于那里的WordPress编码器,我花了一段时间才意识到wp_ajax_
钩子必须在插件文件或我的子主题的functions.php中。它不适用于普通的页面模板!
答案 6 :(得分:0)
从jQuery的1.4.1版开始,内置了一个jQuery.parseJSON()函数。
答案 7 :(得分:0)
我最近遇到了同样的问题,我使用jQuery的.serializeArray()通过AJAX调用发布表单数据以进行验证。在服务器端,我需要将此对象拆分为一个关联数组,该数组将复制原始的$ _POST数据结构,所以我写了这个小函数:
function unserializeMe($obj) { $data = array(); foreach($obj as $arr) { $data[$arr['name']] = $arr['value']; } return $data; }
然后你要做的就是将输入对象转换为数组类型,然后在funciton调用中传递它:
$objData = (array) $_POST['data']; $data = unserializeMe($objData);
答案 8 :(得分:0)
我还编写了一个解析jQuery .serialize()
函数的函数:
function createArray($rubble) { $bricks = explode('&', $rubble); foreach($bricks as $key => $value) { $walls = preg_split('/=/', $value); $built[$walls[0]] = $walls[1]; } return $built; }
答案 9 :(得分:0)
使用函数parse_str。
$array = array();
$string = "title=Hello&desc=World=&s[]=5&s[]=6&s[]=7";
parse_str($string, $array);
关于php.net的描述