Руслан
Новичок
Информер: прогноз погоды через флэш с использованием php и Ajax
Всем привет. Мне показался интересным один вопрос.
Всем известный ресурс Gismeteo предоставляет возможность установки своих информеров (погода на завтра) на сторонних ресурсах, в том числе и в виде xml (с обязательным размещением ссылки на gismeteo). Как это происходит можно взгялнуть здесь http://informer.gismeteo.ru/getcode/xml.php?id=27612 .
На странице gismeteo мы выбираем страну, область, город и страница выдаёт нам ссылку на xml файл. Вот примерно такую:http://informer.gismeteo.ru/xml/27612_1.xml .
Меняем город на этой странице - меняется имя xml файла.
Делаем флэш-информер с обращением к xml файлу - всё работает на ура.
Но, в этом случае флэш-информер показывает погоду только по одному городу, имя xml-файла которого мы "вшили" в AS нашего флэша. Для того, чтобы изменить город надо переписывать AS в нашем флэш-файле вручную выбрав город и получив ссылку xml уже для этого города.
Вопрос: Как это автоматизировать? Как сделать чтобы в информере была возможность выбирать страну, область, город?
То есть в флэш-файле делаем форму - страна-область-город, в зависимости от выбора, флэш обращается к странице гисметео, получает соответствующее имя xml, обращается к нему и выводит погоду на завтра для выбранного города.
Для меня процесс осложняется тем, что выбор страны, области, города на этой странице осуществляется скриптом js_country.js с использованием AJAX. А в Аяксе я к сожалению не секу. Если бы не Аякс, то я бы из флэша обащался к своему php-скрипту, который обращался бы к странице гисметео, запрашивал бы данные формы (либо они были бы сохранены в базе) и отправлял выбраные во флэше позиции на страницу gis, в итоге получал бы имя xml файла и подставлял в переменную во флэш.
Но как это сделать с учётом использования Ajax я не знаю.
Поэтому, парни, кто сечёт в Ajax подскажите, возможно ли это сделать и если да, то методология, тыкание в мануалы, советы и т.д приветствуются.
ниже приведу код js_country.js для тех кто заинтересовался.
Всем привет. Мне показался интересным один вопрос.
Всем известный ресурс Gismeteo предоставляет возможность установки своих информеров (погода на завтра) на сторонних ресурсах, в том числе и в виде xml (с обязательным размещением ссылки на gismeteo). Как это происходит можно взгялнуть здесь http://informer.gismeteo.ru/getcode/xml.php?id=27612 .
На странице gismeteo мы выбираем страну, область, город и страница выдаёт нам ссылку на xml файл. Вот примерно такую:http://informer.gismeteo.ru/xml/27612_1.xml .
Меняем город на этой странице - меняется имя xml файла.
Делаем флэш-информер с обращением к xml файлу - всё работает на ура.
Но, в этом случае флэш-информер показывает погоду только по одному городу, имя xml-файла которого мы "вшили" в AS нашего флэша. Для того, чтобы изменить город надо переписывать AS в нашем флэш-файле вручную выбрав город и получив ссылку xml уже для этого города.
Вопрос: Как это автоматизировать? Как сделать чтобы в информере была возможность выбирать страну, область, город?
То есть в флэш-файле делаем форму - страна-область-город, в зависимости от выбора, флэш обращается к странице гисметео, получает соответствующее имя xml, обращается к нему и выводит погоду на завтра для выбранного города.
Для меня процесс осложняется тем, что выбор страны, области, города на этой странице осуществляется скриптом js_country.js с использованием AJAX. А в Аяксе я к сожалению не секу. Если бы не Аякс, то я бы из флэша обащался к своему php-скрипту, который обращался бы к странице гисметео, запрашивал бы данные формы (либо они были бы сохранены в базе) и отправлял выбраные во флэше позиции на страницу gis, в итоге получал бы имя xml файла и подставлял в переменную во флэш.
Но как это сделать с учётом использования Ajax я не знаю.
Поэтому, парни, кто сечёт в Ajax подскажите, возможно ли это сделать и если да, то методология, тыкание в мануалы, советы и т.д приветствуются.
ниже приведу код js_country.js для тех кто заинтересовался.
PHP:
//selector by mv28jam
function selector(){
this.sel1=document.getElementById('sd_country');
this.sel2=document.getElementById('sd_distr');
this.sel3=document.getElementById('sd_city');
this.c_i=0;
this.c_n=0;
this.c_o=0;
this.mar_a=document.getElementsByName('gl_reg');
this.list_5 = new Array();
this.callfunc=false;
this.def_par= new Array(3);
//---
this.getXmlHttp = function(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
//---
this.ajax_go_xml = function (flag , where, post_send) {
var xml;
var xmlhttp = this.getXmlHttp();
xmlhttp.open('POST', where, true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var obj = this;
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4){
if (xmlhttp.status == 200){
if(xmlhttp.responseXML.documentElement == null){
try{
xmlhttp.responseXML.loadXML(xmlhttp.responseText);
if(xmlhttp.responseXML.documentElement == null){
alert("Can't load");
return;
}
}catch (e) {
alert("Can't load");
return;
}
}
xmld=xmlhttp.responseXML;
obj.send_res(flag, xmld);
}
}
}
xmlhttp.send(post_send);
}
//-------------------------------------------------------------------------------------------------
this.send_res = function (flag,ajax_res){
if(flag=='step0') this.create_list0(ajax_res);
if(flag=='step1') this.create_list1(ajax_res);
if(flag=='step2') this.create_list2(ajax_res);
if(flag=='step0d') this.create_list0(ajax_res,true);
if(flag=='step2d') this.create_list2(ajax_res,true);
}
//---
this.sel_countyr = function (invar,num){
this.sel2.disabled=false;
for(i=0;i<this.mar_a.length;i++){
this.mar_a[i].style.color='#4a6900';
this.mar_a[i].style.fontSize='12px';
}
this.mar_a[num].style.color='red';
this.mar_a[num].style.fontSize='14px';
this.from_r(invar);
}
this.from_r = function (invar){
this.sel1.options.length = 0;
this.sel1.options[this.sel1.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel1.disabled=false;
this.sel2.options.length = 0;
this.sel3.options.length = 0;
this.ajax_go_xml('step0', 'index.php','a0='+invar);
}
this.from_c = function (){
this.sel2.disabled=false;
this.ajax_go_xml('step1', 'index.php','a1='+this.sel1.value);
this.sel2.options.length = 0;
this.sel2.options[this.sel2.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel2.disabled=true;
this.sel3.options.length = 0;
this.ajax_go_xml('step2', 'index.php','a2n='+this.sel1.value);
this.sel3.options.length = 0;
this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel2.disabled=true;
}
this.from_d = function (){
for(var i=0; i<this.sel2.length; i++)
if(this.sel2.options[i].selected){
var id2=this.sel2.options[i].value;
}
if (id2=='all'){
this.from_d2(true);
return true;
}
this.ajax_go_xml('step2', 'index.php','a2='+id2);
this.sel3.options.length = 0;
this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel3.disabled=true;
}
this.from_d2 = function (where){
if(where==undefined){
for(var i=0; i<this.sel1.length; i++)
if(this.sel1.options[i].selected){
var id3=this.sel1.options[i].value;
}
}else{
id3=this.sel1.value;
}
this.ajax_go_xml('step2', 'index.php','a2n='+id3);
this.sel3.options.length = 0;
this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel3.disabled=true;
}
this.create_list0 = function (xmld, is_def){
this.sel1.disabled=false;
var items = xmld.getElementsByTagName("country");
var list = new Array(items.length);
var list_0 = new Array(items.length);
this.sel1.options.length = 0;
for (i=0; i < items.length; i++){
list_0[i]=items[i].getAttribute("value");
list[i]=items[i].firstChild.nodeValue;
this.sel1.options[this.sel1.options.length]=new Option(list[i], list_0[i], false, false);
}
if(is_def){
for(var i=0; i<this.sel1.length; i++)
if(this.sel1.options[i].value==this.def_par[1]){
this.sel1.options[i].selected=true;
}
}
}
this.create_list1 = function (xmld){
this.sel2.disabled=false;
var items = xmld.getElementsByTagName("region");
if(items.length!=0){
var list_1 = new Array(items.length);
var list_2 = new Array(items.length);
this.sel2.options.length = 0;
this.sel2.options[this.sel2.options.length]=new Option('Все области', 'all', false, false);
this.sel2.options[0].selected=true;
for (i=0; i < items.length; i++){
list_2[i]=items[i].getAttribute("value");
list_1[i]=items[i].firstChild.nodeValue;
this.sel2.options[this.sel2.options.length]=new Option(list_1[i], list_2[i], false, false);
}
}else{
this.from_d2();
this.sel2.options.length = 0;
this.sel2.options[this.sel2.options.length]=new Option('-Все области-', '', false, false);
this.sel2.disabled=true;
}
}
this.create_list2 = function (xmld, is_def){
this.sel3.disabled=false;
var items = xmld.getElementsByTagName("city");
var list_3 = new Array(items.length);
var list_4 = new Array(items.length);
this.sel3.options.length = 0;
for (i=0; i < items.length; i++){
this.list_5[i]=items[i].getAttribute("old_id");
list_4[i]=items[i].getAttribute("value");
list_3[i]=items[i].firstChild.nodeValue;
this.sel3.options[this.sel3.options.length]=new Option(list_3[i], list_4[i], false, false);
}
if(is_def){
for(var i=0; i<this.sel3.length; i++)
if(this.sel3.options[i].value==this.def_par[2]){
this.sel3.options[i].selected=true;
}
}
}
this.set_c_i = function (){
for(var i=0; i<this.sel3.length; i++)
if(this.sel3.options[i].selected){
this.c_i=this.sel3.options[i].value;
this.c_n=this.sel3.options[i].text;
this.c_o=this.list_5[i];
if(this.callfunc!=false) eval(this.callfunc(this.c_i,this.c_n,this.c_o));
}
}
this.set_callback = function (name){
this.callfunc=name;
}
this.set_default = function (reg_id,count_id,town_id){
this.def_par[0]=reg_id;
this.def_par[1]=count_id;
this.def_par[2]=town_id;
this.sel1.options.length = 0;
this.sel2.options.length = 0;
this.sel3.options.length = 0;
this.sel1.options[this.sel1.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel2.options[this.sel2.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
this.sel1.disabled=true;
this.sel2.disabled=true;
this.sel3.disabled=true;
this.ajax_go_xml('step0d', 'index.php','a0='+this.def_par[0]);
this.ajax_go_xml('step1', 'index.php','a1='+this.def_par[1]);
this.ajax_go_xml('step2d', 'index.php','a2n='+this.def_par[1]);
}
}
//---