За последние 24 часа нас посетили 18373 программиста и 1629 роботов. Сейчас ищут 1905 программистов ...

Как передать массив из PHP в js (AJAX)

Тема в разделе "JavaScript и AJAX", создана пользователем Александр Иванов, 9 сен 2009.

  1. Александр Иванов

    Александр Иванов Активный пользователь

    С нами с:
    30 авг 2009
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Александров
    Народ, нужно помощь, как передать массив из PHP в AJAX?
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
  3. Человек

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

    С нами с:
    24 июл 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Донецк
    440Hz, а не подскажете чем Вы пользуетесть на стороне JS для конвертации массива в JSON. Я вот скачал json.js c json.org, как много где написано. Все нормально, у массивов появился метод .toJSONString(). Он работает. Но при переборе циклом for (i in Array) у всех массивов появляются два лишних элемента, в которых записаны функции из этого файла. Хотя свойство Array.length не изменяется и for (i=0; i<Array.length; i++) работает нормально. Подскажите в чем проблема?
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    я на стороне PHP конверчу.

    http://ru2.php.net/json
     
  5. Человек

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

    С нами с:
    24 июл 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Донецк
    А как передаете его на сервер? Я так понимаю у меня есть массив(объект) в JS, мне из него нужно получить JSON строку, передать на сервер как строку, а там конвертировать при помощи json_decode в массив. Там с ним поработать, потом json_encode и отправить обратно клиенту. Там eval и снова получается JS массив. Или я чтото не так делаю?
     
  6. kostyl

    kostyl Guest

    зачем ты на сервер передаешь елси тебе надо только назад?
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Человек

    ниче не понял.

    давай с самого начала и подробно.
     
  8. Человек

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

    С нами с:
    24 июл 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Донецк
    Допустим у меня есть массив объеков (на клиенте) все элементы которого выступают в качестве параметров для запроса. Ответ сервера это также куча строк. Для того чтобы сделать запрос на сервере, я должен передать с клинета массив объектов.

    Что я делаю. Преобразую массив при помощи .toJSONString() (нагугленное расширение для объекта Array) Получаю этот массив в виде строки JSON. Потом эту строку передаю при помощи AJAX на сервер. Там я получаю строку, преобразую опять в массив. Использю элементы массива как мне необходимо, формирую запрос к БД. Получаю результат запроса n строк. Создаю из этих строк JSON строку и вывожу как ответ сервера. Клиент получает AJAX ответ JSON строку, я ее вставлю в eval и получаю массив элементов. Каждый элемент это строка из результата запроса к БД, в каждом элементе есть ключ->значение соответствующее столбец->значение из БД. С массивом на стороне клиента продолжаю работать при помощи JS
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    так проблема-то в чем? я не пойму.
     
  10. Человек

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

    С нами с:
    24 июл 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Донецк
    Проблема(она не кринтична, тема то не моя) в самом начале этого процесса передачи-получения данных. При преобразовании массива на стороне клиента в JSON. Это же обязательно делать в моем случае? И как это далаете Вы? В том как это делаю я появилась небольшая проблема

    Вы ответели, мол, конвертируте на стороне ПХП, но ведь для начала все равно надо сделать массиd->JSON на клиенте?

    Я наверно сбил Вас с толку тем что тема "Передача из ПХП", а у меня вопрос наоборот на ПХП сервер. Звыняйте...
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    можно же сразу JSON передать. без преобразования в строку, как параметры.

    POSTом

    и вернуть так же JSON, ан не строку.
     
  12. Человек

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

    С нами с:
    24 июл 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Донецк
    Ну правильно, я о другом и не говорю. Я говорю о преобразовании массива в JSON(JSON это же и есть строка вроде)

    На клиенте:
    [js]var value=1;

    var arr=new Array();

    arr[0]['name']='Иванов'
    arr[0]['name2']='Иван'
    arr[0]['name3']='Иванович'
    arr[1]['name']='Петров'
    arr[1]['name2']='Петр'
    arr[1]['name3']='Петрович'

    //ajax
    var request=newRequest();
    var url="my_url.php";
    //вопрос тут. Допустим мне нужно весь массив arr на сервер отправить (бывает что нужно, не смотрите что я в качестве примера ФИО взял)
    //параматры AJAX запроса
    var param="par1="+value;
    param+="&par2="+arr.toJSONString(); //конкретная строка которая меня интересует.
    request.onreadystatechange=my_function()
    request.open("POST", url, false);
    request.send(param);[/js]

    На сервере:
    PHP:
    1. <?$value=$_POST['par1'];
    2. $arr=$_POST['par2']; //это JSON
    3. $arr=json_decode($arr, true); //это уже массив
    4. echo $arr[0]['name'] //Иванов
    5. echo $arr[1]['name3'] //Петрови?>
    Вопрос касается строки 18 в JS.
     
  13. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а-а-а-а

    вы руками...

    я думал под JQ - там все гооораздо проще.
     
  14. Человек

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

    С нами с:
    24 июл 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Донецк
    Ага руками... когда решил AJAX попробовать использовать, сразу к JQ обратился, но не осилил изза отсутствия знаний по простому JS. Купил книжку по JS, там про AJAX достаточно написано, теперь вот не знаю стоит ли JQ заниматься. Не очень понятно что оно упрощает и какие собсно выгоды.
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    да вот твою задачу как раз и упростит