Прототип Ajax.Updater Eval Javascript Функции - PullRequest
2 голосов
/ 28 ноября 2009

У меня есть образец страницы:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Ajax Page</title>
<script type="text/javascript">
function ajax_hello() {
    alert ("hello");    
}
alert ("Hello from JS");
</script>
</head>

<body>
This is the Ajax page.
<a href='#' onclick='ajax_hello();'>Click here to fire off JS function</a>.
</body>
</html>

Я звоню так:

new Ajax.Updater($(element), page, { method: "get", evalScripts: true });

Предупреждение запущено, но функция не регистрируется (ajax_hello ()).

Есть ли способ заставить ajax зарегистрировать функцию javascript на вызывающей странице?

1 Ответ

5 голосов
/ 28 ноября 2009

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

Об evalScripts и определения функции Если вы используете evalScripts: правда, любой блок будет оценены. Это не значит, что это будет быть включенным в страницу: они не будут. Их содержание будет просто передано встроенная функция eval (). Есть два последствия для этого:

Местный охват будет охват Внутренняя обработка прототипа функция. Что-нибудь в вашем сценарии объявленный с помощью var будет отброшен мгновенно после оценки, и в любая скорость будет невидима для Остальная часть страницы скриптов. если ты определить функции там, вам нужно на самом деле создать их, в противном случае они не будет доступен для остальных скриптов страницы. Это следующий код не будет работать:

// This kind of script won't work if processed by Ajax.Updater:
function coolFunc() {
    // Amazing stuff!
}

You нужно будет использовать следующий синтаксис:

// This kind of script WILL work if processed by Ajax.Updater:
coolFunc = function() {
   // Amazing stuff!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...