Непонятки с Ajax. Нужна помошь.

Статус
В этой теме нельзя размещать новые ответы.

Nighilanth

Создатель
Регистрация
7 Окт 2007
Сообщения
24
Реакции
0
Я пытаюсь сделать вызов страниц через Ajax. Проблема в том что JavaScript на загружаемой странице игнорируется. Это ограничение Ajax или я делаю что то неправильно?

Вот код

Код:
<script type="text/javascript"><!--
var bustcachevar=1
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
var bustcacheparameter=""

function ajaxpage (url, containerid){
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest ()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject ("Msxml2.XMLHTTP")
} 
catch (e){
try{
page_request = new ActiveXObject ("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.onreadystatechange=function (){
loadpage (page_request, containerid)
}
if (bustcachevar) //if bust caching of external page
bustcacheparameter= (url.indexOf ("?")!=-1)? "&"+new Date ().getTime (): "?"+new Date ().getTime ()
page_request.open ('GET', url+bustcacheparameter, true)
page_request.setRequestHeader ("Accept-Language", "ru, en");
page_request.setRequestHeader ("Accept-Charset", "windows-1251");
page_request.overrideMimeType ('text/xml; charset=windows-1251');
page_request.send (null)
}

function loadpage (page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf ("http")==-1)) {
document.getElementById (containerid).innerHTML=page_request.responseText;
  $(document).ready(function(){
    $("#tabs").tabs();
  });
}
}

function loadobjs (){
if (!document.getElementById)
return
for (i=0; i<arguments.length; i++){
var file=arguments[i]
var fileref=""
if (loadedobjects.indexOf (file)==-1){ //Check to see if this object has not already been added to page before proceeding
if (file.indexOf (".js")!=-1){ //If object is a js file
fileref=document.createElement ('script')
fileref.setAttribute ("type","text/javascript");
fileref.setAttribute ("src", file);
}
else if (file.indexOf (".css")!=-1){ //If object is a css file
fileref=document.createElement ("link")
fileref.setAttribute ("rel", "stylesheet");
fileref.setAttribute ("type", "text/css");
fileref.setAttribute ("href", file);
}
}
if (fileref!=""){
document.getElementsByTagName ("head").item (0).appendChild (fileref)
fileref.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded')
loadedobjects+=file+" " //Remember this object as being already added to page
}
}
}
// --></script>

загружаемый HTML
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>iPod shuffle</title>
  <link type="text/css" href="http://alma.com.az/user-files/apple/katalog/css/ui.all.css" rel="stylesheet" />
  <script type="text/javascript" src="http://alma.com.az/user-files/apple/katalog/js/jquery-1.3.2.js"></script>
  <script type="text/javascript" src="http://alma.com.az/user-files/apple/katalog/js/ui.core.js"></script>
  <script type="text/javascript" src="http://alma.com.az/user-files/apple/katalog/js/ui.tabs.js"></script>
  <script type="text/javascript">
  $(document).ready(function(){
    $("#tabs").tabs();
  });
  </script>
<style type="text/css">
.head1 {
	font-family: arial;
	font-size: 24px;
	font-weight: normal;
    line-height: 26px;
	color: #522353;
}
#ceni {border-bottom:solid 1px #cccccc;
font-family:Verdana, Arial, Helvetica, sans-serif;
	font-size:12px;
	font-weight:normal;
	color:#999999;
	line-height:20px;
	padding-bottom:3px;
	padding-top:3px;}
	
#ceni-2{border-bottom:solid 1px #cccccc;
font-family:Verdana, Arial, Helvetica, sans-serif;
	font-size:12px;
	font-weight:normal;
	color:#444444;
	line-height:20px;
	padding-right:7px;}

.text, p {
	font-family:Verdana, Arial, Helvetica, sans-serif;
	font-size:12px;
	font-weight:normal;
	color:#999999;
	line-height:20px;}
</style>
</head>

<body>

  <table class="head1" width="800" height="200"><tr>
  <td width="50%" align="center" valign="middle">Новый iPod shuffle</td>
  <td width="50%" align="center" valign="middle"><img style="border: 0px none;" src="http://alma.com.az/user-files/apple/images/prod-images/ipodshufflenew.jpg" alt="" /></td>
  </tr></table>
<div id="tabs" style=" min-width:800px">
    <ul>
        <li><a href="#fragment-1"><span>Описание</span></a></li>
        <li><a href="#fragment-2"><span>Цены</span></a></li>
        <li><a href="#fragment-3"><span>Технические характеристики</span></a></li>
    </ul>
    <div id="fragment-1">
<table width="900" style="text-align:justify;" cellpadding="0" cellspacing="0" ><tr valign="top"><td width="450">
    <p>У самого маленького в&nbsp;мире музыкального плеера, регуляторы перемещены с&nbsp;корпуса iPod shuffle на&nbsp;шнур для&nbsp;наушников. Это&nbsp;позволило не&nbsp;только значительно уменьшить размер iPod shuffle, но&nbsp;и&nbsp;упростить использование плеера, ведь теперь кнопки управления всегда под&nbsp;рукой. Элементы управления нового iPod shuffle расположены на&nbsp;шнуре правого наушника. Теперь, когда центральный пульт управления расположен так&nbsp;удобно, вы&nbsp;можете выбирать музыку и&nbsp;включать функцию VoiceOver, не&nbsp;отвлекаясь от&nbsp;занятий спортом, поездки на&nbsp;велосипеде&nbsp;или любого другого дела. Раньше из-за ограниченного объёма памяти вам&nbsp;приходилось при&nbsp;синхронизации оставлять множество любимых песен на&nbsp;компьютере. Но&nbsp;теперь память iPod shuffle увеличилась до&nbsp;4 ГБ. Этого достаточно, чтобы слушать музыку часами: до&nbsp;1000 песен и&nbsp;много плейлистов.</p></td>
<td width="15">&nbsp;</td>
<td width="450">
<p>Даже крепление iPod shuffle стало более стильным. Теперь это&nbsp;надёжное крепление из&nbsp;нержавеющей стали отлично смотрится на&nbsp;вашей рубашке, пиджаке, тренировочном костюме&nbsp;или рюкзаке. А&nbsp;благодаря элегантному и&nbsp;прочному корпусу из&nbsp;анодированного алюминия ? серебристого&nbsp;или чёрного цвета ? ваш&nbsp;iPod shuffle станет ещё&nbsp;одним модным аксессуаром.
<br />С музыкальной точки зрения, новый iPod shuffle просто великолепен&nbsp;&mdash; ведь у&nbsp;него есть уникальная функция VoiceOver. Представьте: вы&nbsp;слушаете песню и&nbsp;хотите узнать её&nbsp;название&nbsp;или исполнителя. Нажмите кнопку&nbsp;&mdash; и&nbsp;VoiceOver подскажет, слегка приглушив музыку. И&nbsp;даже объявит названия ваших плейлистов. А&nbsp;когда аккумулятору потребуется зарядка, VoiceOver сообщит вам&nbsp;и&nbsp;об&nbsp;этом.</p></td></tr></table>
<div><p><a href="http://www.apple.com/ru/ipodshuffle/" target="_blank" style="text-decoration:none; color:#444444;">Подробнее об&nbsp;iPod shuffle&hellip;</a> (сайт Apple CНГ)</p></div>
</div>

   <div id="fragment-2">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td id="ceni">iPod shuffle 4GB, серебристый</td>
<td id="ceni" width="60">95 AZN</td></tr>
<tr>
<td id="ceni">iPod shuffle 4GB, черный</td>
<td id="ceni" width="60">95 AZN</td></tr>
<tr><td><br />
</td></tr></table>
    </div>
    <div id="fragment-3">
 
<table cellpadding="0" cellspacing="0">
<tr>
<td id="ceni-2">Размеры и вес</td>
<td id="ceni">Высота: 45.2 мм, Ширина: 15.5 мм, Глубина: 7.8 мм с креплением, Вес: 10.7 гр.</td>
</tr>
<tr>
<td id="ceni-2">Емкость</td>
<td id="ceni">Модуль флэш-памяти объёмом 4ГБ, Возможность хранения до 1000 музыкальных композиций в формате AAC 128 кбит/с, Возможность сохранения данных через модуль флэш-памяти USB</td>
</tr>
<tr>
<td id="ceni-2">Аудио</td>
<td id="ceni">Воспроизведение без пропусков, Частотная характеристика: от 20 Гц до 20 кГц, Поддерживаемые звуковые форматы: AAC  (от 8 до 320 кбит/с), защищённый AAC  (из iTunes Store), MP3  (от 8 до 320 кбит/с), MP3 VBR, Audible  (форматы 2, 3 и 4), WAV и AIFF.
</td>
</tr>
<tr>
<td id="ceni-2">Входы и выходы</td>
<td id="ceni">3,5-мм разъём для стереонаушников.</td>
</tr>
<tr>
<td id="ceni-2">Наушники</td>
<td id="ceni">Apple Earphones c пультом.</td>
</tr>
<tr>
<td id="ceni-2">Voice Over Kit</td>
<td id="ceni">Поддерживаемые языки: Chinese  (Mandarin), Czech, Dutch, English, French, German, Greek, Italian, Japanese, Polish, Portuguese, Turkish.</td>
</tr>
<tr>
<td id="ceni-2">Аккумулятор и питание</td>
<td id="ceni">Встроенный литиевый аккумулятор с полимерным электролитом, Время работы в режиме воспроизведения: до 10 часов при полном заряде, Зарядка через прилагаемую док-станцию USB, Время полной зарядки: около 3 часов.</td>
</tr>
<tr>
<td id="ceni-2">Системные требования</td>
<td id="ceni">Mac: Компьютер Mac с портом USB 2.0, Mac OS X 10.4.11 или более поздней версии, iTunes 8.1 или более поздней версии. Windows: Компьютер PC с портом USB 2.0, Windows Vista; Windows XP Home или Professional  (Service Pack 2 или выше), iTunes 8.1 или более поздней версии. Скоростной интернет канал.</td>
</tr>
<tr>
<td id="ceni-2">Комплект поставки</td>
<td id="ceni">iPod shuffle, Наушники-вкладыши с пультом, iPod shuffle USB Cable, Руководство по работе.</td>
</tr>
</table><br /> 
    </div>
</div>




</body>
</html>
 
Конечно же игнорируется Javascript при загрузке через ajax.
Если требуется исполнение скрипта, то грузи документ через iframe.
 
  • Заблокирован
  • #3
Используя jQuery, можно загружать и исполнять JS (с этого же домена) с помощью функции Для просмотра ссылки Войди или Зарегистрируйся
Код:
$.ajaxSetup({async: false});
$.getScript(fileName);
$.ajaxSetup({async: true});
 
Вообще-то ТС собирается грузить html страницы и getScript для этого совсем не подходит.
 
А если скрипта нет в HTML файле, а только вызов функций? Допустим если я в заголовке вызывающего файла размещу код скрипта, а в вызываемом файле вызов функции, это возможно?
 
javascript вообще не обрабатывается. это просто загрузчик файлов.
 
Ясно, будем читать про iframe. Спасибо всем, кто помог.
 
  • Заблокирован
  • #8
Нет, ну вообще можно поизвращаться. Например, средствами js пропарсить полученный HTML, вытащить адреса скриптов, дернуть их getScript.

Но даже сама постановка вопроса какбы намекает нам, что что-то тут не так, в самой постановке задачи. Сайт свой? Чужой?

Если из скриптов нужны только табы, что мешает подключить ui.core.js, ui.tabs.js у себя и после каждого ajax-запроса выполнять в callback-функции $("#tabs").tabs();
 
Jameson! Я как раз использую для табов Ui.tabs.js. Напиши поподробнее где выполнять callback? скрипты подключаються у меня. Проблема в том что каждый раз при загрузке нового файла нужно исполнить $("#tabs").tabs(); А как это сделать я не знаю. О том и был Вопрос (Просто не правильно сформулирован)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху