Вызывание функции JavaScript, возвращенной из ответа Ajax

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

68
задан Federico Zancan 13 September 2013 в 08:40
поделиться

5 ответов

Я думаю для корректной интерпретации вопроса под этой формой: "Хорошо, я уже сделан со всем материалом Ajax; я просто хочу знать, если функция JavaScript, мой обратный вызов Ajax, вставленный в DIV, является вызываемым в любое время с того момента на, то есть, я не хочу называть его контекстуально к возврату обратного вызова".

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

1) Ваш код JavaScript, возвращенный обратным вызовом Ajax, должен быть синтаксически в порядке;
2), Даже если Ваше объявление функции вставляется в <script> блок в существующем <div> элемент, браузер не будет знать, что новая функция существует, поскольку код объявления никогда не выполнялся. Так, Вы должны eval() Ваш код объявления, возвращенный обратным вызовом Ajax, чтобы эффективно объявить Вашу новую функцию и иметь ее в наличии в течение целого времени жизни страницы.

, Даже если довольно фиктивный, этот код объясняет идею:

<html>
    <body>
        <div id="div1">
        </div>
        <div id="div2">
            <input type="button" value="Go!" onclick="go()" />
        </div>
        <script type="text/javascript">
            var newsc = '<script id="sc1" type="text/javascript">function go() { alert("GO!") }<\/script>';
            var e = document.getElementById('div1');
            e.innerHTML = newsc;
            eval(document.getElementById('sc1').innerHTML);
        </script>
    </body>
</html>

я не использовал Ajax, но понятие является тем же (даже если пример, который я выбрал уверенный, не очень умен :-)

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

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

73
ответ дан Community 24 November 2019 в 14:12
поделиться

Это не походит на хорошую идею.

необходимо абстрагировать функцию для включения в остальную часть кода JavaScript от данных, возвращенных методами Ajax.

Если это имеет значение, тем не менее, (и я не понимаю, почему Вы вставляете блок сценария в отделение?) даже встраивают методы сценария, записанные в блоке сценария, будет доступно.

1
ответ дан Peter Mortensen 24 November 2019 в 14:12
поделиться

С jQuery я сделал бы это с помощью getScript

5
ответ дан kgiannakakis 24 November 2019 в 14:12
поделиться

Это кажется довольно странным дизайном для Вашего кода - обычно имеет больше смысла называть Ваши функции непосредственно из .js файла и затем только, чтобы получать данные с вызовом Ajax.

Однако я полагаю, что это должно работать путем вызова оценка () на ответе - если это - синтаксически корректный код JavaScript.

6
ответ дан Peter Mortensen 24 November 2019 в 14:12
поделиться

Это полностью возможно, и существуют даже некоторые довольно законные варианты использования для этого. Используя Прототип платформа это сделано следующим образом.

new Ajax.Updater('items', '/items.url', {
    parameters: { evalJS: true}
});

См. документация из Ajax updater. Опции находятся в , общие опции устанавливают . Как обычно, существуют некоторые протесты о том, где "это" указывает на, таким образом, читает мелкий шрифт.

код JavaScript будет оценен после загрузки. Если содержание содержит функцию myFunc(),, Вы могли бы действительно просто сказать myFunc() впоследствии. Возможно, следующим образом.

if (window["myFunc"])
   myFunc()

Это проверяет, существует ли функция. Возможно, у кого-то есть лучший перекрестный браузер способ сделать это, которое работает в Internet  Explorer  6.

9
ответ дан Peter Mortensen 24 November 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: