|
|
|
| Имеется функция, ниже привожу, кстати её можно посмотреть тут
http://tune.yandex.ru/region/newgeoselector/geoselectorTree.js
//arrayMaker
function arrayMaker(){}
arrayMaker.makeArray = function(iId, iCallerId){
request="http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml?parentRegionID="+iId + "&iCallerId=" + iCallerId +"&rnd="+ Math.random();
// функция на успех запроса
var responceOK = function(request, trace) {
selectFactory.populateList(request.parentRegionID, request.iCallerId);
if(formManager.tryDisableForm){
formManager.tryDisableForm(request.parentRegionID);
}
}
// функция на неудачу запроса
var responceError = function(trace) {
// alert(trace);
}
// предупреждаем остальных что начали рисовать селект для этого региона, чтобы они не пытались рисовать селект тогоже уровня
if( selectFactory.confirmLastPosition(iCallerId) ){
var c = aPopulated.length;
aPopulated[c] = new Array();
aPopulated[c]['selfId'] = iId;
}
else {
/* var nxt = selectFactory.detectNextPosition( iCallerId );
if(nxt==0)return;
aPopulated[ nxt ] = new Array();;
aPopulated[ nxt ]['selfId'] = iId;
*/
}
try{
var ajaxObjectGET = new Ajax(
new AjaxJS(),
request,
responceOK,
responceError,
'resp error'
);
ajaxObjectGET.send();
} catch(e) {
responceError('init error');
}
}
|
при запросе такой ссылки:
request="http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml?parentRegionID="+iId + "&iCallerId=" + iCallerId +"&rnd="+ Math.random();
точнее вот эта
http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml?parentRegionID=225
эта уже напрямую без параметров JS
получаем массив примерно такого вида:
aRegions225 = new Array();
var newArray = aRegions225;
newArray['name'] = new Array();
newArray['id'] = new Array();
newArray['type'] = new Array();
newArray['haveChilds'] = new Array();
var lng=newArray['name'].length;
newArray['name'][lng] = "Дальний Восток";
newArray['id'][lng] = "73";
newArray['type'][lng] = "4";
newArray['haveChilds'][lng] = 1;
var lng=newArray['name'].length;
newArray['name'][lng] = "Поволжье";
newArray['id'][lng] = "40";
newArray['type'][lng] = "4";
newArray['haveChilds'][lng] = 1;
...
|
но как сделать чтобы не ссылаться на тот сервер, а брать со своего сервера, допустим с БД, составить базу не проблема, проблема как передать массив каким образом? ведь просто так сгенерировать при помощи PHP и отдать скрипту не получится, я пробывал уже так сделать не получилось. Тоесть я брал уже полученный массив и сохранял в отдельный файл и уже подключал таким образом:
request="http://localhost/166.xml";
и так
request="http://localhost/166.js?parentRegionID="+iId + "&iCallerId=" + iCallerId +"&rnd="+ Math.random();
менял расширения файлов и .xml и .js и так пробывал .txt не получалось почемуто, мне главное понять как происходит передача а там уже я с БД буду передовать
сам в JS не силен, буду признателен за помощь | |
|
|
|
|
|
|
|
для: Terri
(14.05.2007 в 18:50)
| | ну так как, есть какие нибудь предложения?
мне нужно только понять как происходить подача массива, я пытался просто подставить с уже имеющим массивом файл, но ничего не получается, он его толи не воспринимает .. | |
|
|
|
|
|
|
|
для: Terri
(15.05.2007 в 10:05)
| | Вы можете написать в двух словах: откуда и куда вам нужно передать массив? Если из РНР в ява-скрипт, то я бы сделал так: на РНР собрал бы массив в одну строковую переменную, передал бы ее ява-скрипту, а в ява-скрипте опять разобрал бы эту строку в массив. | |
|
|
|
|
|
|
|
для: coloboc66
(15.05.2007 в 12:26)
| | короче говоря так =)
var arJS = "<?=implode('|', $arPHP)?>".split ('|');
|
при включенных коротких кавычках в .ini | |
|
|
|
|
|
|
|
для: bronenos
(15.05.2007 в 13:52)
| | не совсем понял, что вы имели введу? | |
|
|
|
|
|
|
|
для: coloboc66
(15.05.2007 в 12:26)
| | мне нужно сделать форму выбора стран,регионов,городов... как тут http://tune.yandex.ru/region/
у них чтобы получить массив для JS, массив передается как я понял через XML уже готовый или может формируется через PHP и потом уже передается по XML
так вот, у них я посмотрел запрос для получения массива такой
request="http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml?parentRegionID="+iId + "&iCallerId=" + iCallerId +"&rnd="+ Math.random();
где parentRegionID имеет айди номер выбранного элемента в <option> который передается по "iId"
далее следует параметр iCallerId правдо я непонял что это означает что должно по нему передоватся, и ещё один параметр rnd который получает сгенерированное число, как я понял необязательное
я попробывал заменить её на
request="http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml?parentRegionID=225&iCallerId=" + iCallerId;
второе окно загрузилось нормально
решил эту строчку поменять на свою
request="http://localhost/script.php?parentRegionID=225&iCallerId=" + iCallerId;
В скрипте script.php я написал
<?php
$r = " aRegions225 = new Array();
var newArray = aRegions225;
newArray['name'] = new Array();
newArray['id'] = new Array();
newArray['type'] = new Array();
newArray['haveChilds'] = new Array();
var lng=newArray['name'].length;
newArray['name'][lng] = 'Дальний Восток';
newArray['id'][lng] = '73';
newArray['type'][lng] = '4';
newArray['haveChilds'][lng] = 1;
var lng=newArray['name'].length;
newArray['name'][lng] = 'Поволжье';
newArray['id'][lng] = '40';
newArray['type'][lng] = '4';
newArray['haveChilds'][lng] = 1;
var lng=newArray['name'].length;
newArray['name'][lng] = 'Северо-Запад';
newArray['id'][lng] = '17';
newArray['type'][lng] = '4';
newArray['haveChilds'][lng] = 1;
var lng=newArray['name'].length;
newArray['name'][lng] = 'Сибирь';
newArray['id'][lng] = '59';
newArray['type'][lng] = '4';
newArray['haveChilds'][lng] = 1;
var lng=newArray['name'].length;
newArray['name'][lng] = 'Урал';
newArray['id'][lng] = '52';
newArray['type'][lng] = '4';
newArray['haveChilds'][lng] = 1;
var lng=newArray['name'].length;
newArray['name'][lng] = 'Центр';
newArray['id'][lng] = '3';
newArray['type'][lng] = '4';
newArray['haveChilds'][lng] = 1;
var lng=newArray['name'].length;
newArray['name'][lng] = 'Юг';
newArray['id'][lng] = '26';
newArray['type'][lng] = '4';
newArray['haveChilds'][lng] = 1;
AjaxJS.onload('', {parentRegionID: 225, iCallerId: });
";
return $r;
?>
|
но почемуто окно не заполнилось со списком, непойму как передать массив для JS | |
|
|
|
|
|
|
|
для: Terri
(15.05.2007 в 14:25)
| | AJAX передает только строковую переменную.
А вы собираетесь передать массив, да и не просто массив, а массив со строковыми индексами.
Так не пойдёт.
1. Сформируйте в PHP-скрипте не один массив с четырьмя строковыми индексами, а четыре одномерных массива с числовыми индексами:
arrName
arrId
arrType
arrhaveChilds
2. каждый из сформированных вами массивов преобразуйте в строку, используя разделитель, например, символ #, методом implode или join
3. контеканируйте 4 полученных строки в одну, также используя разделитель #
4. Передавайте именно эту одну строку.
5. На HTML-странице, получив строковую переменную, преобразуйте её в один общий массив методом split, используя тот же разделитель #. Ну а потом методом splice получите из общего массива четыре массива, аналогичных сформированным в PHP-скрипте (длина каждого из них будет равна 1/4 от длины общего массива) | |
|
|
|
|
|
|
|
для: CNT
(15.05.2007 в 15:07)
| | У меня все данные будут находится в БД MySQL там у меня структура стандартная (один к одному) обычно разделы так делают: ID | parent_id | name , и вытаскивать я буду по ID номеру
http://localhost/script.php?parentRegionID=225
PHP скрипт должен обратится к БД и выбрать данные по ID номеру и сформировать массив для ява скрипу.
Выбрать из БД не проблема, это я без проблем сделаю, мне нужно только знать в каком формате передавать сформированный массив, я даже просто указал файл с этим массивом но ничего не получилось, почему, не пойму, хотя сервер у яндекса выдает тоже самое | |
|
|
|
|
|
|
|
для: Terri
(14.05.2007 в 18:50)
| | я тут проверил, зашёл по ссылке без всех параметров
http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml
оказывается что файл getGeoByParent.xml не передаёт как XML формат, а просто передаёт как текстовое, и тот массив тоже что выше приводил передаётся в текстовом варианте, но вот непойму почему у меня не получается его обработать JS скриптом на своём сервере? | |
|
|
|
|
|
|
|
для: Terri
(15.05.2007 в 15:03)
| | to CNT: я так понял, что ему надо наоборот - передать массив в ява-скрипт... | |
|
|
|
|
|
|
|
для: coloboc66
(15.05.2007 в 15:11)
| | всё верно, я так и писал что нужно передавать массив для ява-скрипту :) | |
|
|
|
|
|
|
|
для: Terri
(15.05.2007 в 15:15)
| | Ну так вам сказали, как это делать. И CNT и bronenos. | |
|
|
|
|
|
|
|
для: coloboc66
(15.05.2007 в 15:29)
| | я так понимаю не нужно передавать ввиде одной строки, вот к примеру если обратится по ссылке
http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml?parentRegionID=225
то, сервер не выдаёт ввиде одной строки, а там сразу видно что строк много и ява скрипт понимает | |
|
|
|
|
|
|
|
для: coloboc66
(15.05.2007 в 15:11)
| | Блин, а я о чём написал-то?
Массив - это виртуальность определённого документа.
То, что является массивом для PHP-сценария, таковым для другого документа (скрипт HTML-страницы) не является.
Передавать JScript'у можно только строку
Поэтому массив ещё в PHP-сценарии должен преобразовываться в текстовую строку, а в JScript'e из строки. если необходимо, надо формировать собственный массив.
PS. 10 человек в военной форме, идущие гурьбой - для вас кто?
Правильно - толпа военных.
А в армии они называются отделением. | |
|
|
|
|
|
|
|
для: CNT
(15.05.2007 в 15:32)
| | to Terri: я вам рекомендую не смотреть на чужие скрипты и пытаться их изменить под себя (это очень сложно без определенного опыта), а написать свой скрипт с нуля. Сформулируйте для себя МИНИМАЛЬНУЮ задачу, и пошагово начинайте ее решать. Так вы и опыта в программировании наберетесь, и помогать вам будут на форуме намного более эффективно - когда вы будете задавать конкретный вопрос, а не вываливать здоровенный скрипт - кому охота в этом скрипте копаться, если только он не гений???!!! | |
|
|
|
|
|
|
|
для: coloboc66
(15.05.2007 в 15:40)
| | но дело в том что я в яве-скрипте ничего не понимаю не изучал его, но знаю PHP, еслибы я знал ява язык, то может быть не задавался подобными вопросами, но ведь и все сразу нельзя знать все языки, а задача к примеру сейчас стоит сделать, вот и пытаюсь решить, а задача в принципе я незнаю, только понять как передать и всё, а всё остальное уже написано, все .js скрипты я слил к себе
Но я ещё попробывал как сделать, удалил все строки переноса все что там выдовалось поместил в одну строку, длинная правдо поучилась, но как неработало так и неработает, странно както | |
|
|
|
|
|
|
|
для: Terri
(15.05.2007 в 15:49)
| | Вот вам простой алгоритм:
<?php
$arr=array("Москва","Питер", "Горький");
$str_arr=implode("|",$arr);
?>
<script>
var str_arr = "<?=$str_arr;?>".split ('|');
for(i=0;i<str_arr.length;i++)alert(str_arr[i]);
</script>
|
здесь var str_arr и есть новый массив. Все работает. И ничего странного. Так и передавайте массив в ява-скрипт. | |
|
|
|
|
|
|
|
для: Terri
(15.05.2007 в 15:49)
| | В общем, смотрите внимательнее.
На яндексе, как обычно, решили "пойти в обход".
В PHP-сценарии формируется СТРОКА, кою вы здесь продублировали выше (тем где переменная r="")
Т.е. никаких массивов PHP-скрипт вовсе не формирует - он формирует строку, коя на HTML-странице в своём первозданном виде выглядит как "формирование массива"
И вот эту полученную строку JS-код подставляет в виде innerHTML тега <script> | |
|
|
|
|
|
|
|
для: CNT
(15.05.2007 в 16:12)
| | хорошо, спасибо, я тогда сейчас буду эксперементировать
to: coloboc66 но у вас передаётся одномерный массив, ну ладно, не буду придерется, попробую ещё поэксперементировать
но вообще то, у них ведь скрипт уже готовый он и должен его обрабатывать те данные что передаются по ссылке
вот сам скрипт
http://tune.yandex.ru/region/newgeoselector/geoselectorTree.js | |
|
|
|
|
|
|
|
для: Terri
(15.05.2007 в 16:22)
| | скрипт, который создает новый тег <script> и заполняет его полученной строкой, находится по другому адресу - http://tune.yandex.ru/region/ajax/ajaxjs.js?2 | |
|
|
|
|
|
|
|
для: CNT
(15.05.2007 в 16:34)
| | ага, спасибо, там всего три файла я тогда находил
ajax.js
ajaxjs.js
geoselectorTree.js
ну я по эксперементирую, что получится
да кстати, а зачем подставляют ?2 на конце расширения .js ?
такое часто бываю замечаю | |
|
|
|
|
|
|
|
для: CNT
(15.05.2007 в 16:34)
| | заранее извиняюсь если что не так напишу, ну не понимаю как его исполнить этот скрипт
если тот файл что тут http://tune.yandex.ru/region/ajax/ajaxjs.js?2 исполняет тоесть всё что нужно делает строит в одну строку и как надо передаёт яве-скрипту, то мне уже ненадо на ява-скрипте что-то ещё писать, тогда вопрос такой, как должен оформлен файл который будет содержать данные? я просто даже в текстовый файл скопировал тот массив что получил по ссылке
http://tune.yandex.ru/region/newgeoselector/getGeoByParent.xml?parentRegionID=225
и указал в место той ссылки на свою на тот файл текстовый, но всёже скрипт не заработал..
ладно, если кому-то надоел со своими глупыми вопросами, не пиште, пойму... | |
|
|
|