2012-07-03 2 views
0

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

window.onload = function getArtists() { 
    xmlhttpLoad=new XMLHttpRequest();   
    xmlhttpLoad.onreadystatechange=function() { 
     if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) { 
      // put data in an invisible HTML elem   
     } 
    } 
} 

Теперь я хочу использовать определенную библиотеку, но она требует чтобы эти данные были загружены перед документом document.onload. Как я могу это сделать? Могу ли я использовать код выше, но блокировать разбор HTML, пока данные не будут загружены? Я имею в виду что-то вроде

<head> 
    <script> 
     // block parsing until data are loaded 
     // put data from server in a variable 
    </script> 
    <script src="newLib.js"></script> 
<head> 
+0

Может вы просто скрыть все html в теле ('display: none') вызвать ajax, а затем показать их после успешного запроса? –

+0

проблема в том, что библиотека делает некоторые вещи с этими данными при запуске события window.onload, поэтому это не должно работать – Naigel

+0

Звучит как сумасшедшая библиотека, если она не будет работать без этого ограничения, и документы не расскажут вам, как для достижения этой цели. Что такое библиотека? – Brad

ответ

1

Если вы не используете событие load, но просто запустите его непосредственно, он начнется сразу же после разбора блока сценария.

Чтобы сделать синтаксический разбор следующего блока ожидающим ответа AJAX, вы должны сделать синхронный запрос. Вы делаете это путем подачи false для третьего параметра (асинхронным) в open вызова:

<head> 
    <script type="text/javascript"> 

    xmlhttpLoad=new XMLHttpRequest(); 
    xmlhttpLoad.onreadystatechange=function() { 
    if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) { 
     // put data in an invisible HTML elem   
    } 
    } 
    xmlhttpLoad.open("get", "somepage", false); 

    </script> 
    <script type="text/javascript" src="newLib.js"></script> 
<head> 

}

+0

спасибо, это было довольно просто ... – Naigel

+0

@LorenzoC Мне нужно скажите, что я вам ответил. – rcdmk

2

Вы можете попробовать установить вызов AJAX быть async = false, поэтому он будет остановить выполнение страницы, пока он не закончит.

+0

спасибо, было довольно просто ... – Naigel

1

Вы можете загрузить библиотеку, когда данные готовы:

xmlhttpLoad=new XMLHttpRequest(); 
xmlhttpLoad.onreadystatechange=function() { 
    if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) { 
     // put data in an invisible HTML elem 
     var script = document.createElement("script"); 
     script.src = "newLib.js"; 
     document.getElementsByTagName("head")[0].appendChild(script); 
    } 
} 
xmlhttpLoad.open("get", "somepage", false); 
+0

Я попробую, но таким образом библиотека не будет загружена при запуске события onload ... – Naigel

+0

Я думал, что это просто зависит от данных – Esailija

+0

В этом случае вы можете установить событие onload для добавляемого скрипта: 'script .onload = function() {// здесь код для загрузки библиотеки} ' – rcdmk

Смежные вопросы