- Moderated by:
- Support
-
- rank:
-
Freshman
- registered:
- June 2005
- Status:
- offline
- last visit:
- 14.04.08
- Posts:
- 39
Hello, I want send an JS array to PHP Array with Ajax.
How serialize my JS Array ?
Wiew my code:
JS code:
Code
function to_send()
{
var myarray= array(1,2,3,4);
var pars = "module=nameofmodule&func=senddata&messages="+function_to_serialize(myarray);
var myAjax = new Ajax.Request(
"ajax.php",
{
method: 'post',
parameters: pars,
onComplete: response
});
}
function response(req)
{
alert('ok');
}
PHP code:
Code
$messages = AjaxUtil::convertFromUTF8(FormUtil::getPassedValue('messages', null, 'post'));
For sending an PHP array to JS, it's easy but the opposite are more difficult !!
Thanks for your help
--
Gilles... -
- rank:
-
Professional
- registered:
- September 2003
- Status:
- offline
- last visit:
- 21.10.07
- Posts:
- 2423
hi,
http://aspn.activestate.com/ASPN/Cookbook/PHP/Recipe/414334
see ya
--
http://www.invalidresponse.com -
- rank:
-
Freshman
- registered:
- June 2005
- Status:
- offline
- last visit:
- 14.04.08
- Posts:
- 39
Thanks !! It works !
Why not create a JS function to serialize JS array ?? And integer this function to the API. I think that my problem are currently... send a JS Array to PHP Array !!!
I put the code of this function !
Thanks !!!
Code
function serialize(o) {
var p = 0, sb = [], ht = [], hv = 1;
function classname(o) {
if (typeof(o) == "undefined" || typeof(o.constructor) == "undefined") return '';
var c = o.constructor.toString();
c = utf16to8(c.substr(0, c.indexOf('(')).replace(/(^\s*function\s*)|(\s*$)/ig, ''));
return ((c == '') ? 'Object' : c);
}
function is_int(n) {
var s = n.toString(), l = s.length;
if (l > 11) return false;
for (var i = (s.charAt(0) == '-') ? 1 : 0; i < l; i++) {
switch (s.charAt(i)) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': break;
default : return false;
}
}
return !(n < -2147483648 || n > 2147483647);
}
function in_ht(o) {
for (k in ht) if (ht[k] === o) return k;
return false;
}
function ser_null() {
sb[p++] = 'N;';
}
function ser_boolean(b) {
sb[p++] = (b ? 'b:1;' : 'b:0;');
}
function ser_integer(i) {
sb[p++] = 'i:' + i + ';';
}
function ser_double(d) {
if (isNaN(d)) d = 'NAN';
else if (d == Number.POSITIVE_INFINITY) d = 'INF';
else if (d == Number.NEGATIVE_INFINITY) d = '-INF';
sb[p++] = 'd:' + d + ';';
}
function ser_string(s) {
var utf8 = utf16to8(s);
sb[p++] = 's:' + utf8.length + ':"';
sb[p++] = utf8;
sb[p++] = '";';
}
function ser_array(a) {
sb[p++] = 'a:';
var lp = p;
sb[p++] = 0;
sb[p++] = ':{';
for (var k in a) {
if (typeof(a[k]) != 'function') {
is_int(k) ? ser_integer(k) : ser_string(k);
__serialize(a[k]);
sb[lp]++;
}
}
sb[p++] = '}';
}
function ser_object(o) {
var cn = classname(o);
if (cn == '') ser_null();
else if (typeof(o.serialize) != 'function') {
sb[p++] = 'O:' + cn.length + ':"';
sb[p++] = cn;
sb[p++] = '":';
var lp = p;
sb[p++] = 0;
sb[p++] = ':{';
if (typeof(o.__sleep) == 'function') {
var a = o.__sleep();
for (var kk in a) {
ser_string(a[kk]);
__serialize(o[a[kk]]);
sb[lp]++;
}
}
else {
for (var k in o) {
if (typeof(o[k]) != 'function') {
ser_string(k);
__serialize(o[k]);
sb[lp]++;
}
}
}
sb[p++] = '}';
}
else {
var cs = o.serialize();
sb[p++] = 'C:' + cn.length + ':"';
sb[p++] = cn;
sb[p++] = '":' + cs.length + ':{';
sb[p++] = cs;
sb[p++] = "}";
}
}
function ser_pointref(R) {
sb[p++] = "R:" + R + ";";
}
function ser_ref(r) {
sb[p++] = "r:" + r + ";";
}
function __serialize(o) {
if (o == null || o.constructor == function) {
hv++;
ser_null();
}
else switch (o.constructor) {
case Boolean: {
hv++;
ser_boolean(o);
break;
}
case Number: {
hv++;
is_int(o) ? ser_integer(o) : ser_double(o);
break;
}
case String: {
hv++;
ser_string(o);
break;
}
/*@cc_on @*/
/*@if (@_jscript)
case VBArray: {
o = o.toArray();
}
@end @*/
case Array: {
var r = in_ht(o);
if (r) {
ser_pointref(r);
}
else {
ht[hv++] = o;
ser_array(o);
}
break;
}
default: {
var r = in_ht(o);
if (r) {
hv++;
ser_ref(r);
}
else {
ht[hv++] = o;
ser_object(o);
}
break;
}
}
}
__serialize(o);
return sb.join('');
}
function utf16to8(str) {
var out, i, j, len, c, c2;
out = [];
len = str.length;
for (i = 0, j = 0; i < len; i++, j++) {
c = str.charCodeAt(i);
if (c <= 0x7f) {
out[j] = str.charAt(i);
}
else if (c <= 0x7ff) {
out[j] = String.fromCharCode(0xc0 | (c >>> 6),
0x80 | (c & 0x3f));
}
else if (c < 0xd800 || c > 0xdfff) {
out[j] = String.fromCharCode(0xe0 | (c >>> 12),
0x80 | ((c >>> 6) & 0x3f),
0x80 | (c & 0x3f));
}
else {
if (++i < len) {
c2 = str.charCodeAt(i);
if (c <= 0xdbff && 0xdc00 <= c2 && c2 <= 0xdfff) {
c = ((c & 0x03ff) << 10 | (c2 & 0x03ff)) + 0x010000;
if (0x010000 <= c && c <= 0x10ffff) {
out[j] = String.fromCharCode(0xf0 | ((c >>> 18) & 0x3f),
0x80 | ((c >>> 12) & 0x3f),
0x80 | ((c >>> 6) & 0x3f),
0x80 | (c & 0x3f));
}
else {
out[j] = '?';
}
}
else {
i--;
out[j] = '?';
}
}
else {
i--;
out[j] = '?';
}
}
}
return out.join('');
}
--
Gilles...
