Помогите пожалуйста с JS

12
!kt0
На сайте с 28.06.2006
Offline
46
1185

Нужно считать текст страницы (причем в запросе присутствуют переменные: page.php?t=1 итп), а потом положить это в форму (считываться будет select)

не понимаю :confused:

http://seorepa.com/ (http://seorepa.com/) - блог был там, пока не запилили mchost
A
На сайте с 12.04.2007
Offline
9
#1
!kt0:
Нужно считать текст страницы (причем в запросе присутствуют переменные: page.php?t=1 итп), а потом положить это в форму (считываться будет select)

не понимаю 😕

Как-то не очень внятно ты объяснил, чего тебе надо. Но если я всё правильно понял, то тебе надо в сторону AJAX копать.

seo.adman.com: покупка/продажа ссылок, рекламный брокер (http://seo.adman.com) vads.adman.com: свой рекламный брокер за 5 минут (http://vads.adman.com)
!kt0
На сайте с 28.06.2006
Offline
46
#2

Думаю, что все гораздо проще, чем изучать аякс с нуля =)

К сожалению, в javascript я тоже полный ноль. Нужно сделать, чтобы менялись два выпадающих списка без перезагрузки страницы, причем хитро: изменили первый - поменялось содержимое второго, изменили второй - поменялось содержимое первого.

Подозреваю, что должно происходить примерно так:

1) получить текст страницы с адресом вида page.php?perem1=ctoto&perem2=... в переменную.

2) засунуть то что находится в этой переменной в форму

Или второй вариант:

1) получить страницу вида page.js?perem1=ctoto&perem2=... в переменную (На странице выводится javascript)

2) выполнить то что лежит в переменной

PS: без получения страницы сделать нельзя, так как все содержимое хранится в БД

stealthy
На сайте с 15.06.2006
Offline
69
#3
!kt0:
Думаю, что все гораздо проще, чем изучать аякс с нуля

AJAX это не язык, не технология, а просто ПОДХОД. Изучать его не нужно, все что вы написали в своем первом варианте - это и есть асинхронное получение данных с сервера. Произошло что-то (событие - выбор первого селекта, например) - создаете объект умеющий работать с HTTP запросами и просите его за вас скачать страницу. Полученный стринг используете дальше как хотите. Хотите - засовываете его во второй селект, хотите - кэшируете его перед этим. В любом случае вы должны будете программировать на javascript. И называйте это аяксом или нет - это никакой разницы не даст.

Если хотите решить задачу самостоятельно, а не получить готовое решение - сходите на dklab.ru (http://dklab.ru/lib/JsHttpRequest/), например. Правда он чего то не отвечает сейчас, но думаю к утру оно работать то точно будет. Там все достаточно подробно было расписано. Да и вообще в сети примеров масса.

Готовое решение тут для вас вряд ли кто-то напишет и отладит, на это нужно время.

Twilight CMS (http://www.twl.ru): есть Free версия, очень проста и удобна в использовании. Консультирую по любым вопросам. Новый спорт - практическая стрельба (http://nikit.in) - не для офисного планктона.
malls
На сайте с 08.08.2005
Offline
255
#4

Аякс, аякс - чуть что так из пушки по воробьям. Еще до аякса эту проблему легко решали например на сайтах с объявами по продаже авто - выбираешь марку, и второй селект с моделями меняется - просто массивы... Большие правда - но кто не без греха?

PC
На сайте с 09.03.2006
Offline
19
#5
!kt0:
Нужно сделать, чтобы менялись два выпадающих списка без перезагрузки страницы, причем хитро: изменили первый - поменялось содержимое второго, изменили второй - поменялось содержимое первого.

Вот был под рукой скрипт, состоит из двух комбобоксов. Попробуй модифицировать под себя, если это то что тебе надо.


<FORM name=doublecombo>
<SELECT name=example
onchange=redirect(this.options.selectedIndex) size=1>
<OPTION selected>Мой сайт</OPTION> <OPTION>News
Sites</OPTION> <OPTION>Search Engines</OPTION></SELECT>
<SELECT name=stage2 size=1> <OPTION selected
value=http://www.dynamic-design.com.ua/>Начало</OPTION>
<OPTION
value=http://www.dynamic-design.com.ua/develop>Коллекция
примеров</OPTION> <OPTION
value=http://www.dynamic-design.com.ua/develop/script>JavaScript</OPTION>
<OPTION
value=http://www.dynamic-design.com.ua/develop/dhtml>Dynamic
HTML</OPTION> <OPTION
value=http://www.dynamic-design.com.ua/develop/perl>Perl</OPTION>
<OPTION
value=http://www.dynamic-design.com.ua/resume>Резюме</OPTION></SELECT>
<INPUT class=button name=test onclick=go() type=button value=" Перейти ">

<SCRIPT><!--

var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group=new Array()

group[0][0]=new Option("Начало","http://www.dynamic-design.com.ua/")
group[0][1]=new Option("Коллекция примеров","http://www.dynamic-design.com.ua/develop/")
group[0][2]=new Option("JavaScript","http://www.dynamic-design.com.ua/develop/script/")
group[0][3]=new Option("Dynamic HTML","http://www.dynamic-design.com.ua/develop/dhtml/")
group[0][4]=new Option("Perl","http://www.dynamic-design.com.ua/develop/perl/")
group[0][5]=new Option("Резюме","http://www.dynamic-design.com.ua/resume")

group[1][0]=new Option("CNN","http://www.cnn.com")
group[1][1]=new Option("ABC News","http://www.abcnews.com")

group[2][0]=new Option("Hotbot","http://www.hotbot.com")
group[2][1]=new Option("Infoseek","http://www.infoseek.com")
group[2][2]=new Option("Excite","http://www.excite.com")
group[2][3]=new Option("Lycos","http://www.lycos.com")

var temp=document.doublecombo.stage2

function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options=new Option(group[x].text,group[x].value)
}
temp.options[0].selected=true
}

function go(){
location=temp.options[temp.selectedIndex].value
}
//--></SCRIPT>
</FORM>
PC
На сайте с 09.03.2006
Offline
19
#6

Сейчас сам проверил, что то не работает...., а раньше вроде работал. :(

Ну я его в интернете пару лет назад находил, поройся может где оригинальный вариант еще в интернете лежит.

Сам то я в javascripte не очень. :)

поэтому с вопросами ко мне обращаться бесполезно. :)

Kolyaj
На сайте с 28.03.2006
Offline
69
#7

!kt0, какая-то странная модель поведения у ваших списков.

По теме: данные можете получать как новомодным XMLHttpRequest, так и созданием элемента script. Таскать тяжеленные библиотеки, типа Prototype, из-за двух списков как-то нехорошо, можете воспользоваться след. функцией, созданной сильным сокращением Prototype:


var Try = {
these: function() {
for (var i = 0; i < arguments.length; i++) {
try {
return arguments();
} catch (e) {}
}
}
};
var Ajax = {
getTransport: function() {
return Try.these(
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
function() {return new ActiveXObject('Microsoft.XMLHTTP')},
function() {return new XMLHttpRequest()}
) || false;
},

getContent: function(url) {
var req = this.getTransport();
try {
req.open('get', url, false);
req.send(null);
} catch (e) {
return '';
}
return req.responseText;
}
};

В результате имеем функцию Ajax.getContent('page.php?param1=value1&param2=value2'), которая возвращает содержимое страницы с данным url или пустую строку в случае ошибки.

При использовании элемента script можно сделать функцию:


function include(url) {
var s = document.createElement('SCRIPT');
s.type = 'text/javascript';
s.src = url;
document.body.appendChild(s);
}

В результате имеем include('page.php?param1=value1&param2=value2'), но при этом пхп-скрипт должен генерировать код JavaScript, который будет заполнять списки.

Удачи.

!kt0
На сайте с 28.06.2006
Offline
46
#8

Всем огромное спасибо за помощь! =)))

!kt0
На сайте с 28.06.2006
Offline
46
#9
Kolyaj:
!kt0, какая-то странная модель поведения у ваших списков.

По теме: данные можете получать как новомодным XMLHttpRequest, так и созданием элемента script. Таскать тяжеленные библиотеки, типа Prototype, из-за двух списков как-то нехорошо, можете воспользоваться след. функцией, созданной сильным сокращением Prototype:

var Try = {
these: function() {
for (var i = 0; i < arguments.length; i++) {
try {
return arguments();
} catch (e) {}
}
}
};
var Ajax = {
getTransport: function() {
return Try.these(
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
function() {return new ActiveXObject('Microsoft.XMLHTTP')},
function() {return new XMLHttpRequest()}
) || false;
},

getContent: function(url) {
var req = this.getTransport();
try {
req.open('get', url, false);
req.send(null);
} catch (e) {
return '';
}
return req.responseText;
}
};

В результате имеем функцию Ajax.getContent('page.php?param1=value1&param2=value2'), которая возвращает содержимое страницы с данным url или пустую строку в случае ошибки.

При использовании элемента script можно сделать функцию:

function include(url) {
var s = document.createElement('SCRIPT');
s.type = 'text/javascript';
s.src = url;
document.body.appendChild(s);
}

В результате имеем include('page.php?param1=value1&param2=value2'), но при этом пхп-скрипт должен генерировать код JavaScript, который будет заполнять списки.

Удачи.

Не понимаю. Если пользуюсь Ajax.getContent, то летят русские кодировки 😕

Kolyaj
На сайте с 28.03.2006
Offline
69
#10
!kt0:
Если пользуюсь Ajax.getContent, то летят русские кодировки

Сделайте, чтобы в HTTP-заголовках (при получении содержимого списков) явно отдавалась кодировка

header("Content-type: text/html; charset=windows-1251");

Можно еще в XMLHttpRequest кодировку указывать, но я не пробовал, так что не знаю, работает ли и везде ли.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий