За последние 24 часа нас посетили 17266 программистов и 1196 роботов. Сейчас ищут 1346 программистов ...

json_encode() - перебросить массив из PHP в JS.

Тема в разделе "PHP для новичков", создана пользователем zbs2000, 17 июл 2012.

  1. zbs2000

    zbs2000 Активный пользователь

    С нами с:
    31 май 2012
    Сообщения:
    12
    Симпатии:
    0
    Помогите пож

    Делаю так :

    <?php
    $js_array = json_encode($massiv);
    echo $js_array; // -- выводит массив, все нормально
    ?>


    Потом так:
    <input type='button' id="but1" name="but1" value='показать' onclick="for_nav('<?php echo $js_array;?>')">

    После внажатия на кнопку выдает ошибку
    unterminated string literal
    И показует на фигурную скобку первую в строке которая получилась после json_encode - - >>> {

    Пробовал переменную $js_array обрабатывать addslashes($js_array) - не помогло

    Просто хочется чтобы функция была во внешнем файле. Чтобы потом ее использовать во многих местах. (насчет того, что можно написать текст скрипта в тексте страницы)
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а ты в получившийся HTML смотрел хоть раз? =)
     
  3. zbs2000

    zbs2000 Активный пользователь

    С нами с:
    31 май 2012
    Сообщения:
    12
    Симпатии:
    0
    На ошибке останавливается и не хочет идти дальше

    Добавлено спустя 16 минут 26 секунд:
    На утро на свежую голову сделал вот это :
    1)
    <?php
    $js_array = base64_encode(json_encode($massiv));
    echo $js_array;
    ?>


    2)
    в <head> добавил
    <script type="text/javascript" src="../js/zbs/base64.js"></script>


    3)
    Конечно сделал такой файл base64.js

    и туда написал найденную на форуме функцию:
    // NACHALO
    /**
    *
    * Base64 encode/decode
    * http://www.webtoolkit.info
    *
    **/

    var Base64 = {
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    //метод для кодировки в base64 на javascript
    encode : function (input) {
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0
    input = Base64._utf8_encode(input);
    while (i < input.length) {
    chr1 = input.charCodeAt(i++);
    chr2 = input.charCodeAt(i++);
    chr3 = input.charCodeAt(i++);
    enc1 = chr1 >> 2;
    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
    enc4 = chr3 & 63;
    if( isNaN(chr2) ) {
    enc3 = enc4 = 64;
    }else if( isNaN(chr3) ){
    enc4 = 64;
    }
    output = output +
    this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
    this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
    }
    return output;
    },

    //метод для раскодировки из base64
    decode : function (input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    while (i < input.length) {
    enc1 = this._keyStr.indexOf(input.charAt(i++));
    enc2 = this._keyStr.indexOf(input.charAt(i++));
    enc3 = this._keyStr.indexOf(input.charAt(i++));
    enc4 = this._keyStr.indexOf(input.charAt(i++));
    chr1 = (enc1 << 2) | (enc2 >> 4);
    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
    chr3 = ((enc3 & 3) << 6) | enc4;
    output = output + String.fromCharCode(chr1);
    if( enc3 != 64 ){
    output = output + String.fromCharCode(chr2);
    }
    if( enc4 != 64 ) {
    output = output + String.fromCharCode(chr3);
    }
    }
    output = Base64._utf8_decode(output);
    return output;
    },
    // метод для кодировки в utf8
    _utf8_encode : function (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";
    for (var n = 0; n < string.length; n++) {
    var c = string.charCodeAt(n);
    if( c < 128 ){
    utftext += String.fromCharCode(c);
    }else if( (c > 127) && (c < 2048) ){
    utftext += String.fromCharCode((c >> 6) | 192);
    utftext += String.fromCharCode((c & 63) | 128);
    }else {
    utftext += String.fromCharCode((c >> 12) | 224);
    utftext += String.fromCharCode(((c >> 6) & 63) | 128);
    utftext += String.fromCharCode((c & 63) | 128);
    }
    }
    return utftext;

    },

    //метод для раскодировки из utf8
    _utf8_decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;
    while( i < utftext.length ){
    c = utftext.charCodeAt(i);
    if (c < 128) {
    string += String.fromCharCode(c);
    i++;
    }else if( (c > 191) && (c < 224) ) {
    c2 = utftext.charCodeAt(i+1);
    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
    i += 2;
    }else {
    c2 = utftext.charCodeAt(i+1);
    c3 = utftext.charCodeAt(i+2);
    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
    i += 3;
    }
    }
    return string;
    }
    }

    //~ // Использовать так:
    //~ // 1
    //~ 2
    //~ 3
    //~ 4
    //~ 5
    //~ 6
    //~ 7
    //~ 8
    //~
    //~ alert(Base64.encode('Кодируем в base64 на javascript'))
    //~ // результат
    //~ // JXUwNDFBJXUwNDNFJXUwNDM0JXUwNDM4JXUwNDQwJXUwNDQzJXU
    //~ wNDM1JXUwNDNDICV1MDQzMiBiYXNlNjQgJXUwNDNEJXUwNDMwIGphdmFzY3JpcHQ=
    //~ alert(Base64.decode('JXUwNDFBJXUwNDNFJXUwNDM0JXUwNDM4JXUwNDQwJXUwNDQzJXU
    //~ wNDM1JXUwNDNDICV1MDQzMiBiYXNlNjQgJXUwNDNEJXUwNDMwIGphdmFzY3JpcHQ='))
    //~ // результат
    //~ // Кодируем в base64 на javascript

    // KONEC

    Дальше использовал ее при раскодировании
    внутри JS функции
    var json = Base64.decode('js_array'); // js_array - передается как параметр функци JS

    Вывел на экран и получил подобную структуру которую видел при echo в пункте 1)

    Массиву внутри функции еще не пробовал присваивать, но проброс уже не ругается и внутрь функции уже попадает. Сейчас поробую присвоить. Возможно заработает.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тихо сам с собою я веду беседу? =)