Zikula: A Flexible Open Source Content Management System
home | forum | contact us

Dizkus

Bottom
JS Array to PHP Array with Ajax
  • Posted: 31.08.2006, 02:10
     
    Gilles69
    rank:
    Freshman 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...
  • Posted: 31.08.2006, 08:10
     
    InvalidResponse
    rank:
    Professional 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
  • Posted: 31.08.2006, 13:55
     
    Gilles69
    rank:
    Freshman 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...

Extensions Moderation

Main Menu

Extensions Database

Documentation

Development

Login

Donate to Zikula