Встроенный скрипт jQuery не работает в вызове AJAX - PullRequest
2 голосов
/ 29 января 2010

У меня есть проблема:
в то время как я вызываю встроенный скрипт (который также использует jQuery) с другой страницы с помощью ajax - кажется, что jQuery больше не определен (?), и я не могу использовать какие-либо функции jQuery, которые должны применяться (согласно встроенному скрипту) к содержанию.

Это в основном список новостей, который содержит ссылки на конкретные новости. Сейчас я предпочитаю использовать inline-script, потому что в других местах эта функциональность мне не понадобится.

$.ajax({
 url: href,
 cache: false,
 success: function(html){
  $('#fancy_ajax').append($(html).find('.mainContentPadded'));
}
});

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

Когда я загружаю полную страницу (не ее часть) - jQuery работает, как и ожидалось (поэтому я натолкнулся на мысль о том, что его нужно «перефразировать»).

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 января 2010

Так что, если я правильно понимаю ваш вопрос, у вас есть некоторый JavaScript, содержащийся в переменной html? Если это так, он не будет работать, потому что JavaScript, полученный из обращения AJAX, не выполняется браузером из-за угроз безопасности.

Я рекомендую вам включить необходимый код javascript на вашу страницу, которая инициирует запрос Ajax, чтобы он был уже доступен при добавлении нового содержимого.

* редактировать ...

В качестве комментария monksp добавил отличную ссылку, показывающую, как заставить jQuery делать именно то, что вы хотите.

Вот также некоторый код, чтобы сделать то же самое, но вручную:

<html>
<head>
<title>Test JavaScript JSON</title>
</head>
<script src="https://www.google.com/jsapi"></script>
<script>
google.load('jquery', '1.3.2');
</script>
<body>
<script type="text/javascript">
    $(document).ready(function() {
        $.getJSON('testjs.json', function(json){
               $(document.body).append(json.html);
               eval(json.js);
             });
    });

</script>
</body>
</html>

Вот содержание testjs.json:

{"html":"<p class=\"newelement\">Click me</p>","js":"$(\".newelement\").click(function() { alert($(this).text()); });"}

И, наконец, есть множество существующих плагинов и других вещей, которые динамически включают javascript. Я использовал YUI Получить в прошлом: http://developer.yahoo.com/yui/3/get/

1 голос
/ 29 января 2010

Я смущен вопросом, я думаю. Часть javascript, которую вы разместили, загружена на страницу через ajax? Например, вы загружаете страницу в браузере, затем что-то происходит, и этот javascript загружается на страницу? Это не сработает, потому что любой загруженный таким образом JavaScript не будет выполняться.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...