2009-08-20 2 views
0

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

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

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

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

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

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

EDIT: вот пример того, что я хочу сделать:

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

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?

+0

Попробуйте разместить свой код, который не работает. Трудно сказать, что вы пытаетесь сделать. – noah

+0

Спасибо. Я обновил свой исходный пост с помощью кода выше. – andrewl85

ответ

0

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

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

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

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

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

+0

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

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