Выполнение функций Javascript из AJAX - HTML-ответ - PullRequest
0 голосов
/ 20 августа 2009

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

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

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

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

Все работает нормально, если я загружаю файл PHP извне, поэтому я знаю, что JavaScript правильный. Это просто не работает, когда я загружаю файл PHP в HTML-ответ DIV, а затем вызываю 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?

1 Ответ

0 голосов
/ 20 августа 2009

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

Firefox поддерживает скрипт eval.

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

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

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

...