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

Тема в разделе "Другие языки", создана пользователем Nighilanth, 20 июл 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. Nighilanth

    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>
     
  2. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    Конечно же игнорируется Javascript при загрузке через ajax.
    Если требуется исполнение скрипта, то грузи документ через iframe.
     
  3. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    Используя jQuery, можно загружать и исполнять JS (с этого же домена) с помощью функции getScript()
    Код:
    $.ajaxSetup({async: false});
    $.getScript(fileName);
    $.ajaxSetup({async: true});
     
  4. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    Вообще-то ТС собирается грузить html страницы и getScript для этого совсем не подходит.
     
  5. Nighilanth

    Nighilanth Создатель

    Регистр.:
    7 окт 2007
    Сообщения:
    24
    Симпатии:
    0
    А если скрипта нет в HTML файле, а только вызов функций? Допустим если я в заголовке вызывающего файла размещу код скрипта, а в вызываемом файле вызов функции, это возможно?
     
  6. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    javascript вообще не обрабатывается. это просто загрузчик файлов.
     
  7. Nighilanth

    Nighilanth Создатель

    Регистр.:
    7 окт 2007
    Сообщения:
    24
    Симпатии:
    0
    Ясно, будем читать про iframe. Спасибо всем, кто помог.
     
  8. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    Нет, ну вообще можно поизвращаться. Например, средствами js пропарсить полученный HTML, вытащить адреса скриптов, дернуть их getScript.

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

    Если из скриптов нужны только табы, что мешает подключить ui.core.js, ui.tabs.js у себя и после каждого ajax-запроса выполнять в callback-функции $("#tabs").tabs();
     
  9. Nighilanth

    Nighilanth Создатель

    Регистр.:
    7 окт 2007
    Сообщения:
    24
    Симпатии:
    0
    Jameson! Я как раз использую для табов Ui.tabs.js. Напиши поподробнее где выполнять callback? скрипты подключаються у меня. Проблема в том что каждый раз при загрузке нового файла нужно исполнить $("#tabs").tabs(); А как это сделать я не знаю. О том и был Вопрос (Просто не правильно сформулирован)
     
  10. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
Статус темы:
Закрыта.