2015-04-30 3 views
0

У меня есть php-файл, который эхо-код HTML с элементом <script>. как это:
Выполнение javascript через ajax

<div> 
    <button onclick="FunctionName();">Click Me</button> 
</div> 
<script type="text/javascript" id="script1"> 
    function FunctionName() { 
     /* block of code here */ 
    } 
</script> 
<script type="text/javascript" id="script2"> 
    alert("working") 
</script> 

Я вставив этот код с помощью метода innerHTML. Тем не менее, я понял, что DOM вставляется <script> тег не начал выполняться, если не называть это так:

eval(document.getElementById('script1').innerHTML); 
eval(document.getElementById('script2').innerHTML); 

Теперь проблема заключается в следующем: Скрипт2 выполняется, и это делает предупреждение, что говорит: «работает », но когда я нажимаю на кнопку возвращает консольных эту ошибку:

Uncaught ReferenceError: FunctionName is not defined 

И странная часть, когда я копировать/вставить один и тот же код JavaScript, поместите его внутри Eval(); и введите его в консоль, он отлично работает!

так почему это происходит и как его решить?

+0

Почему вы пытаетесь загрузить скрипт через AJAX? – Huey

+0

У вас есть jQuery? В этом случае вы можете использовать [getScript] (https://api.jquery.com/jquery.getscript/) functoin – Max

ответ

-1

Я думаю, проблема в том, что когда прослушиватель событий щелчка установлен, ваша функция еще не создана.

Попробуйте положить свой скрипт1 перед div, в котором есть событие onClick.

0

This jsFiddle отлично работает с кодом, который у вас есть. Но я вижу, что это вызывает проблемы, если вы добавляете его после создания страницы, поскольку встроенные скрипты не выполняются при добавлении после загрузки страницы.

Если вы добавили его, см. Сообщение this для аналогичной проблемы, если вам нужно иметь его внутри html. Однако я бы рекомендовал использовать jQuery getScript вместо обычного ajax, если вы можете переместить ваши скрипты в другой файл.

$.getScript("ajax/test.js", function(data, textStatus, jqxhr) { 
    // ... 
}); 
+0

Робин, я не уверен, могу ли я передавать некоторые переменные через '$ .getScript()', потому что Я хочу получить код в соответствии с переменными, которые проходят через метод POST. –

+0

Я не совсем уверен, что вы делаете, поэтому мне сложно предложить решение. Если у вас есть переменные в html и вы получите скрипт с ajax, который, как я полагаю, означает, что вы все равно будете на одной странице, вы можете просто извлечь переменные из форм (или где бы они ни были), используя [jQuery val()] (http://api.jquery.com/val/) из скриптов? – Robin

+0

да, я делаю это, но потом я хочу, чтобы эти переменные попадали в файл PHP. например, если пользователь выбрал «a», получит другой код javascript от пользователя, который выбрал «b» .., и эти коды должны обслуживаться с сервера PHP через ajax. –

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