В подключаемом файле js строка, вызов функции при загрузке страницы:
window.onload = HotelsSelectedRead();
1) Почемуто если писать без скобок то функция не вызывается. Помоему я гдето видел что в примере писали без скобок так если не присвоить значение функции, а по событию onload сослаться на HotelsSelectedRead. Тоесть код такой window.onload = HotelsSelectedRead или я ошибаюсь надо писать со скобками?
2)При загрузке страницы у меня HotelsSelectedRead() сробатывает всегда, отправляет запрос, более того ВСЕГДА приходит ответ от сервера вида:
{"gotofunction":"ShowHotelsSelected","hotels":
{"idhotel":[&q uot;134"],"namelongtitle":["\u0413\ Сокаратил тут u00bb"],"namelong":["\u0413\0bb"],"adres":["\u0433, 19"],
"telefon":["8(4236)69-69-90"],"tip":["\u040430"]}}
Оброботчик ответа всегда перенаправляет на функцию ShowHotelsSelected, код ниже.
И вот здесь чтото не понятное начинается.
alert('тгдд'); - Сработало
alert('ок'); - Не сработало
Ответ от сервака нормальный пришел такой как я привел.
Оновляю страницы все проходит нормально. И такие штуки то случаются то не случаются. Иногда обновляю нескольок раз всеравно текст не выводится. Потом херакс выскакивает текст вообщем я в замешательстве почему так происходит.
3) И третий маленький вопрос в js обязательно операторы else заключать в {} если только один оператор там или как в Php необязательно. Работает и без скобок, но может это не шибко граматно, и чудом срабатывает все?
//Отобразить списак избранных гостиниц
function ShowHotelsSelected()
{
if(ResponseParse.hotels != null)
{
alert('тгдд');
document.getElementById('list_hotelsselected').innerHTML = '';
for(var i=0; i<ResponseParse.hotels.idhotel.length; i++)
{
alert('ок');
document.getElementById('list_hotelsselected').innerHTML += '
<div class="list_element" onMouseOver="getElementsByTagName(\'div\')[1].style.display=\'block\'"
onMouseOut="getElementsByTagName(\'div\')[1].style.display=\'none\'">
<div style="white-space:nowrap;"><img class="list_element_del" src="images/del_10_10_0.png" title="Удалить гостиницу"
OnClick="DelHotelsSelected(' + ResponseParse.hotels.idhotel[i] + ')"
onMouseOver="this.src=\'images/del_10_10_1.png\'"
onMouseOut="this.src=\'images/del_10_10_0.png\'"><a href="hotel.php?idhotel=' + ResponseParse.hotels.idhotel[i] + '">'
+ ResponseParse.hotels.namelongtitle[i] + '</a></div>
<div class="list_element_short">' + ResponseParse.hotels.tip[i] + '<br>' + ResponseParse.hotels.namelong[i] + '<br>'
+ ResponseParse.hotels.adres[i] + '<br>' + ResponseParse.hotels.telefon[i] + '</div></div>';
}
}
else
{
document.getElementById('list_hotelsselected').innerHTML = '';
}
}
Спустя 53 минуты, 22 секунды (29.08.2011 - 10:49) Игорь_Vasinsky написал(а):
1. На скока я знаю - ДА, такой синтаксис с (), думаю это обусловлено тем что функция может принимать аргументы
2.
идентично... почему у тя баг - не ясно.
3. Да вроде необязательны - если тока одно действие в операторе.
2.
alert('тгдд'); - Сработало
alert('ок'); - Не сработало
идентично... почему у тя баг - не ясно.
3. Да вроде необязательны - если тока одно действие в операторе.
Спустя 17 минут, 18 секунд (29.08.2011 - 11:07) Xes написал(а):
Цитата |
идентично... почему у тя баг - не ясно. |
Вот и я не понимаю. Я просто для себя алерты написал чтобы понять где баг до куда доходит до куда нет, так их в коде нет. Должно просто document.getElementById('list_hotelsselected').innerHTML заполнятся кодом. Но почемута бывает заходишь на страницу то заполнено то нет, причем ответ от сервака получен всегда.
Вот написал алерты и у видел такую штуку первый вывелся второй нет. Надо было конечно написать алерт ResponseParse.hotels.idhotel.length вместо 'тгдд' тогда бы больше инфы было но поймать это событие когда происходит касяк не фсегда удается то он есть, то его нет.
Спустя 16 минут, 19 секунд (29.08.2011 - 11:23) Xes написал(а):
Вот смотрите еще раз приведу код:
Написал два алерта сколько не обновлял страницу все время срабатывает комментируем первый алерт, то сробатывает то не срабатывает при обнавлении страницы.
Что может за это время происходить в чем причина, я не понимаю.
Причем может быть так что появилась при одном обнавлении, еще раз обновляешь пропала. Может не появлятся по долгу надпись, потом бац проскачила.
if(ResponseParse.hotels != null)
{
//alert(ResponseParse.hotels.idhotel.length);
document.getElementById('list_hotelsselected').innerHTML = '';
for(var i=0; i<ResponseParse.hotels.idhotel.length; i++)
{
alert('ок');
document.getElementById('list_hotelsselected').innerHTML += '<div class="list_element" ..................</div>';
}
}
Написал два алерта сколько не обновлял страницу все время срабатывает комментируем первый алерт, то сробатывает то не срабатывает при обнавлении страницы.
Что может за это время происходить в чем причина, я не понимаю.
Причем может быть так что появилась при одном обнавлении, еще раз обновляешь пропала. Может не появлятся по долгу надпись, потом бац проскачила.
Спустя 15 минут, 5 секунд (29.08.2011 - 11:38) Xes написал(а):
document.getElementById('list_hotelsselected').innerHTML = '';
alert(ResponseParse.hotels.idhotel.length);
Вот еще инфа поменял строки местами, то срабатывает то не срабатывает сам алерт alert(ResponseParse.hotels.idhotel.length);. ТОбишь весь процес тормозит строка:
document.getElementById('list_hotelsselected').innerHTML = '';
Что здесь может быть не так только запрос отправляется когда страница полностью загружена когда он получен div c id="list_hotelsselected" и подавно существует.
Спустя 5 минут, 31 секунда (29.08.2011 - 11:44) Игорь_Vasinsky написал(а):
может проблемы с загрузкой страницы? не полностью подгружается?
Спустя 32 минуты, 59 секунд (29.08.2011 - 12:16) Xes написал(а):
Возможно. тут дальше начал рыть, если отключть яндекс карту тогда все срабатывает. Видать тут чтото конфликтует, через раз, буду искать.
Спустя 57 минут, 11 секунд (29.08.2011 - 13:14) Игорь_Vasinsky написал(а):
да просто она видимо глючно подгружается.
запускай скрипт - когда появиться нужный DIV и всё.
запускай скрипт - когда появиться нужный DIV и всё.
Спустя 40 минут, 6 секунд (29.08.2011 - 13:54) Xes написал(а):
Цитата |
запускай скрипт - когда появиться нужный DIV и всё. |
Дак у меня и на карту и на мою функцию стоит запустить по window.onload - DOM модель поидее уже полностью существует.
Буду кавырять, может на карту поставлю задержку в 2 секунды после onload.
Спустя 6 часов, 48 минут, 54 секунды (29.08.2011 - 20:43) Xes написал(а):
Нашел касяк, яндекс карты подключаются нижеприведенной строкой. Косяк вераятно только на локальной машине так как ошибка неверный ключ, а ключ привязан к конкретному домену. Поэтому видемо на локале тупит на серваке должно нормально рабоать.
Но всеже подскажите как мне по onload страницы подключить яндекскарту например через 3 секунды после загрузки страницы.
Так если есть путь src="http://api-maps.yandex.ru/1.1/index.xml?key=ACx .....
Еще не сталкивался с тем как подключать скрипты не сразу, а позже уже после создания страницы?
Но всеже подскажите как мне по onload страницы подключить яндекскарту например через 3 секунды после загрузки страницы.
Так если есть путь src="http://api-maps.yandex.ru/1.1/index.xml?key=ACx .....
Еще не сталкивался с тем как подключать скрипты не сразу, а позже уже после создания страницы?
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ACxvL5MptIeynOIpuh5==&onerror=apifau lt" type="text/javascript"></script>
Спустя 11 минут, 5 секунд (29.08.2011 - 20:54) killer8080 написал(а):
Xes
здесь скобки нужно убрать.
window.onload = HotelsSelectedRead();
здесь скобки нужно убрать.
Спустя 5 минут, 41 секунда (29.08.2011 - 20:59) killer8080 написал(а):
Цитата (Xes @ 29.08.2011 - 20:43) |
Еще не сталкивался с тем как подключать скрипты не сразу, а позже уже после создания страницы? |
например так
window.onload = function(){
HotelsSelectedRead();
setTimeout(
function(){
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = 'http://api-maps.yandex.ru/1.1/index.xml?key=ACxvL5MptIeynOIpuh5==&';
document.body.appendChild(s);
},
3000
);
}
Спустя 4 минуты, 2 секунды (29.08.2011 - 21:03) Xes написал(а):
Цитата |
Xes window.onload = HotelsSelectedRead(); здесь скобки нужно убрать. |
window.onload = function(){HotelsSelectedRead();RatingRead();};
Все запахало спасибо. Даже ни че в загрузке яндекса не минял. Сгрупировал в одну функцию вызов других функций, а то у меня каждая по window.onload запускалась да еще и со скобками ) (хотя работало, но видемо не правельно). Подгрузку яндекс еще надо назад отодвинуть, как показали, на всякий пожарный и должно быть все ок.