我需要将javascript数组转换为php可读的字符串" unserialize"。
在我的javascript中,我有:
var params = {};
params['showTitle'] = 0;
params['class'] = '';
params['ajax'] = 0;
params['ajaxDom'] = '';
params['what'] = 'defi';
params['color'] = 'dark';
输出我 确实需要 才能得到:
a:6:{s:9:"showTitle";i:0;s:5:"class";s:0:"";s:4:"ajax";i:0;s:7:"ajaxDom";s:0:"";s:4:"what";s:4:"defi";s:5:"color";s:4:"dark";}
为什么 需要 这个?因为服务器端的输出是红色的(php函数是unserialize),我无法改变它(它是框架的一部分)。
我的问题是:如何转换javascript数组?我已经尝试过(但没有工作):
params = JSON.stringify(params);
params = $.param(params);
应该很容易,但我被卡住了......谢谢!
答案 0 :(得分:1)
请查看您是否可以使用此
答案 1 :(得分:1)
只需将js数组作为JSON发送到服务器,然后使用json_decode进行解析,并使用serialize函数对其进行序列化。然后你可以反序列化它。
答案 2 :(得分:0)
这个函数/答案假设很多:主要是你的JavaScript"数组中只有两种类型的数据"将是整数和字符串,然而它产生了你证明PHP反序列化函数需要的输出类型。
var params = {};
params['showTitle'] = 0;
params['class'] = '';
params['ajax'] = 0;
params['ajaxDom'] = '';
params['what'] = 'defi';
params['color'] = 'dark';
function jsArrToPhpSerializedString( arrObj ) {
var str_parts = ['', '', '}'],
arrLen = 0,
ret = '';
for (var prop in arrObj) {
var val = arrObj[prop];
arrLen += 1;
str_parts[1] += 's:' + prop.length + ':"' + prop + '";';
if (typeof val == 'number') {
str_parts[1] += 'i:' + val + ';';
} else if (typeof arrObj[prop] == 'string') {
val = (!val) ? '""' : '"' + val + '"';
str_parts[1] += 's:' + arrObj[prop].length + ':' + val + ';';
}
}
str_parts[0] = 'a:' + arrLen + ':{';
ret = str_parts.join('');
return ret;
}
console.log( jsArrToPhpSerializedString(params) );
// "a:6:{s:9:"showTitle";i:0;s:5:"class";s:0:"";s:4:"ajax";i:0;s:7:"ajaxDom";s:0:"";s:4:"what";s:4:"defi";s:5:"color";s:4:"dark";}"