Выполнение функций Javascript из AJAX — ответ HTML

У меня есть веб-страница, на которой отображаются комментарии, и пользователи могут щелкнуть ссылку «Отметить», чтобы сообщить о неприемлемом комментарии.

Когда они щелкают ссылку «Отметить», я использую AJAX и innerHTML для отображения раскрывающегося списка под комментарием с кодом причины, например. Спам, Оскорбления, Не по теме и т.д., а также кнопка Отмена.

Если пользователь нажимает «Отправить», я хочу использовать другой запрос AJAX для отправки своего ответа в файл PHP, где база данных обновляется, и они получают «Спасибо» на своем конце (без перезагрузки страницы). По сути, я хочу, чтобы DIV, в котором отображается раскрывающийся список, был заменен на «Спасибо» с помощью другого запроса AJAX.

Вот где проблема. Кажется, я не могу выполнить запрос AJAX из HTML-ответа на первый запрос AJAX. Функции JavaScript терпят неудачу — даже простое оповещение («привет, мир») не работает. Я попытался разместить функции JavaScript на главной странице, которая вызывает первый запрос AJAX, а также поместить их в файл PHP, который отображается как HTML-ответ на первый запрос AJAX, но мне не повезло — функции просто выполняют не бегают, когда их вызывают.

Все работает нормально, если я загружаю файл PHP извне, поэтому я знаю, что JavaScript правильный. Это просто не работает, когда я загружаю файл PHP в DIV ответа HTML, а затем вызываю оттуда JavaScript.

Итак, чтобы подвести итог, как вы выполняете функции JavaScript из ответа HTML на запрос AJAX?

РЕДАКТИРОВАТЬ: вот пример того, что я хочу сделать:

Это часть AJAX, которая заполняет DIV, когда человек щелкает ссылку «Пометить»:

xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4)
{
     document.getElementById(whichdiv).innerHTML=xmlhttp.responseText;
}
};

Значение xmlhttp.responseText исходит из этого внешнего файла:

<input type="hidden"/>
<script type="text/javascript" language="javascript">
function displayalert()
{
    alert ('Hello World!');
}
</script>

<form name="myform" id="myform">
<input type="text" name="myfield" value="teststring"/><br/>
<input type="button" name="button" value="Submit" 
   onclick="displayalert();"/>
</form>

Примечание. <input type="hidden"/> выше исходит из предложения, которое я нашел на http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx.

Когда пользователь нажимает кнопку, функция javascript displayalert() не запускается. Окно предупреждения никогда не всплывает. Если я загружаю файл извне, а не вызываю его с помощью innerHTML, скрипт работает нормально.

Может ли xmlhttp.responseText содержать код JavaScript?


person andrewl85    schedule 20.08.2009    source источник
comment
Попробуйте опубликовать код, который не работает. Трудно сказать, что вы пытаетесь сделать.   -  person noah    schedule 20.08.2009
comment
Спасибо. Я обновил свой исходный пост кодом выше.   -  person andrewl85    schedule 21.08.2009


Ответы (1)


зависит от браузера: IE не поддерживает scriptEval для html, загруженного с помощью ajax, что означает, что если у вас есть блоки скриптов в вашем html, они не будут вызываться.

Firefox поддерживает оценку сценария.

Что я обычно делаю, так это вставляю некоторый json во входные данные, затем проверяю, поддерживает ли браузер scriptEval, если нет, извлекаю json, оцениваю его и вызываю какой-либо метод, передающий json.

если браузер поддерживает scriptEval, я также включаю блок скрипта, который содержит вызов того же метода с json.

вы также можете прочитать это: http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html

person mkoryak    schedule 20.08.2009
comment
Спасибо за ответ. Я смог заставить это работать, включив функцию JavaScript в основной файл PHP, а не в возвращаемый код AJAX. Затем я смог вызвать функцию из возвращенного кода AJAX. - person andrewl85; 21.09.2009