В моем приложении я использую Ext.Ajax.request
для загрузки сценариев, которые я выполняю с помощью eval
.
Проблема заключается в том, что, поскольку для завершения запроса AJAX требуется время, код, который выполняется после этого, который нуждается в переменных, которые находятся в script, загруженном через AJAX. В этом примере я покажу, как это происходит. Как я могу изменить этот код так, чтобы выполнение JavaScript после AJAX ожидало, что script в вызове AJAX будет загружен и выполнен?
testEvalIssue_script.htm:
<script type="text/javascript">
console.log('2. inside the ajax-loaded script');
</script>
main.htm:
<html>
<head>
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all-debug.js"></script>
<script type="text/javascript">
function loadViewViaAjax(url) {
Ext.Ajax.request({
url: url,
success: function(objServerResponse) {
var responseText = objServerResponse.responseText;
var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
while(scripts=scriptsFinder.exec(responseText)) {
eval.call(window,scripts[1]);
}
}
});
}
console.log('1. before loading ajax script');
loadViewViaAjax('testEvalIssue_script.htm');
console.log('3. after loading ajax script');
</script>
</head>
<body>
</body>
</html>
выход:
1. before loading ajax script
3. after loading ajax script
2. inside the ajax-loaded script
Как я могу получить вывод в правильном порядке, например:
1. before loading ajax script
2. inside the ajax-loaded script
3. after loading ajax script