Ответ 1
Вы должны быть в состоянии сделать следующее:
$.get($(this).attr("href"), $(this).serialize(), function(data){
var script = $(data).text();
eval(script);
});
Я отправляю запрос на получение jquery следующим образом:
$.get($(this).attr("href"), $(this).serialize(), null, "script");
Ответ, который я ожидаю получить, будет заключен в теги script.
Насколько я понимаю, браузер не выполняет ответ, если он не возвращается без тегов script. Обычно я удалял теги из ответа, но в этой ситуации у меня нет доступа к коду, запущенному на удаленном компьютере, поэтому нельзя выделять теги у источника.
Можно ли отключить теги script с клиентской стороны ответа и выполнить javascript?
Вы должны быть в состоянии сделать следующее:
$.get($(this).attr("href"), $(this).serialize(), function(data){
var script = $(data).text();
eval(script);
});
Или:
var myScript = new Function($('script#myscript',responseText).text());
myScript();
Если я правильно понимаю ваш вопрос, этого достаточно, чтобы получить текст из тегов script:
$(response).text()
Помогло бы вам: http://docs.jquery.com/Ajax/jQuery.getScript?
Ответ Хосе Базилио в порядке, но я рекомендую заменить eval функцией jQuery globalEval...
$.get($(this).attr("href"), $(this).serialize(), function(data) {
script = $(data).text();
$.globalEval(script);
});
globalEval - это функция, которая обычно вызывается при вызове метода ajax с типом возвращаемого значения script.
Это из документации API...
Этот метод ведет себя иначе, чем обычный JavaScript eval() в том, что он выполняется в глобальном контексте (что важно для динамической загрузки внешних скриптов).
Скажем, что наш ответ находится в ответе var:
script = response.replace(/<script>(.*)<\/script>/, "$1"); // Remove tags
eval(script); // Execute javascript
Я сделал это несколько иначе, и использовал php land, чтобы сделать его проще. (Мне не нравится использовать eval, и мне не нравятся огромные заметные перезаписи).
Я поместил все мои jquery в php-строку вроде этого (в реальной жизни был LOT больше JavaScript)
$out .= " $('#save_now').button(); \n";
$out .= " $('#save_now').click( function() {\n";
$out .= " return false;\n";
$out .= " }); \n";
а также в php land
echo "<script>\n";
echo " function onOpen(){ \n";
echo $out;
echo " } \n";
echo "</script>\n";
то в вызове jQuery $.ajax я делаю это
$.ajax({
url: geturl,
type: 'post',
data: getparams,
success: function(data) {
mydiv.html(data);
onOpen();
},
cache: false
});
поскольку вы можете видеть, что вы не занимаетесь землей в php, это просто в моей кодовой базе, я сделал что-то вроде этого. трюк состоит в том, чтобы покончить с $(document).ready(function(){});
и бросить свой собственный