2014-09-05 3 views
0

Я изучаю javascript и хочу использовать синхронный вызов javascript в моем коде.Проблемы с синхронным javascript

Например, у меня есть два сценария, script1.js и script2.js. Вот script1.js:

<script> 

var value1="Script 1"; 
alert(value1); 

//calling script2 
url="script2.js" 
document.write("<scr" + "ipt src=\"" + url + "\"></scr" + "ipt>"); 

</script> 

Здесь вы script2.js

<script>  
    var value2="Script 2";  
    </script> 

Теперь мой вопрос может я напечатать значение из Скрипт2, как если добавить это (предупреждение (значение2);) в моем script1 .js.

<script> 

var value1="Script 1"; 
alert(value1); 

//calling script2 
url="script2.js" 
document.write("<scr" + "ipt src=\"" + url + "\"></scr" + "ipt>"); 
alert(value2); 
</script> 

Я сделал это с помощью asychronous JS как

var scr = document.createElement('script'); 
scr.setAttribute('src', url); 
var head = document.getElementsByTagName("head")[0]; 
head.appendChild(scr); 

Это работает, но я хочу, чтобы достичь этого синхронно какие-либо предложения ??

Заранее спасибо

+1

Кто-то дал мне -1? почему я изучаю javascript, может быть, это очень простой вопрос для многих, но я запутался в этом, мне просто нужно объяснение. – user3754674

+0

скрипт open tag is '' – Igor

+0

oh thanks Я обновил этот. – user3754674

ответ

0

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

index.html

<script> 
var value1="Script 1"; 
alert(value1); 

//calling script2 
url="script2.js" 
document.write("<scr" + "ipt src='script2.js'></scr" + "ipt>"); 
</script> 
<script> 
alert(value2); 
</script> 

script2.js

var value2='yes'; 

Испытано локально и проверить, что это работа (я вижу предупреждение с 'да'), а также то, что вам (все в одном теге скрипта) не работает (генерирует исключение, потому что значение2 не определено).

+0

Что это значит, вы можете объяснить подробно? – user3754674

+0

Запустите новый тег скрипта, в котором вы используете value2, и он будет работать –

+0

Вы имеете в виду добавление document.write ("

-1

В javascript порядок скриптов всегда синхронный. Поскольку вы добавили скрипт 2 после инициализации, вы создали DOM, который выглядит так.

<html> 
    <head> 
     <script> 
     //script 1 
     </script> 
    </head> 
    <body> 
     ---Body content here 
    </body> 
</html> 
<script src="script2.js"/> 

Обратите внимание, как вы поместили скрипт в конец страницы. Поскольку HTML читается синхронно, сценарий1 завершает выполнение (в том числе alert(), у которого значение value2 будет неопределенным, поскольку скрипт2 еще не был разобран), тогда тело HTML будет обработано, а затем script2.js.

Если вы хотите загрузить вторичный скрипт синхронно в середине текущего скрипта, вам нужно будет сделать XMLHTTPRequest и получить контент, а затем запустить eval(script_2_content). Eval будет собирать и анализировать второй скрипт синхронно.

Что вы тогда делаете:

<html> 
    <head> 
     <script> 
     //script 1 before loading script 2 
     //script 2 content 
     //script 1 content after loading script 2 
     </script> 
    </head> 
    <body> 
     ---Body content here 
    </body> 
</html> 
+0

Почему downvotes? Это было мое понимание работы парсеров HTML. –

-1

Похоже, вы хотите asynchronous function, with a callback. (Первый ответ, точно показывает ваш пример!).

В принципе, когда функция завершила загрузку скрипта, она вызовет функцию обратного вызова, где вы сможете запустить свой скрипт alert(value2);.

В противном случае, если вы хотите использовать документ.писать, у вас есть следующие варианты:

(я думаю, что проблема в том, что <script></script> теги в ваш * .js файлы, они не требуются!)

src1.js

document.write('<script src="src2.js"></script'+'>'); 
document.write('<script>alert(value2);</script'+'>'); 

src2.js

var value2 = 'foobar!' 

HTML

<html> 
<body> 
<script src="src1.js"></script> 
</body> 
</html> 

Соответствие вашим требованиям?

+0

Я хочу сделать это inline using document.write – user3754674

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