JQuery.post() внутри jQuery.post()
Представьте веб-сайт, на котором содержимое загружается через меню с помощью jQuery.post() (или .get()).
Представьте, что внутри этого динамически загружаемого содержимого должен быть другой пост jQuery, чтобы показать еще кое-что по содержанию
(все без перехода к новому файлу в адресной строке)
Вот что я имею в виду (но только базовый фрейм...):
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<input type="text" name="n" id="n" placeholder="Search..." />
<button id="click1">Go</button>
<!-- the result of the search will be rendered inside this div -->
<br />
<div id="result" name="result"></div>
<script>
window.onload = (function(){
/* attach a submit handler to the button */
$("#click1").click(function(event) {
$.ajax({
url: 'test.php',
type: 'POST',
data: 'n: term',
success: function(msg) {
$( "#result" ).empty().append( msg );
}
});
});
});
</script>
</body>
</html>
Итак, перестаньте смеяться, я знаю, что страница загружается сама в div, и это не работает из-за того же идентификатора... это not Inception здесь; -)
Но даже если я привяжу к нему совершенно новую страницу с новыми идентификаторами, он не работает...
Можно ли добавить новый jQuery AJAX в уже существующий, уже загруженный контент jQuery AJAX?
Я думаю, да, но я не могу найти свою ошибку...
/EDIT
Думаю, мне нужно дать немного больше информации:
test.php
<input type="text" name="n" id="n" placeholder="Search..." />
<button id="click1">Go</button>
<div id="result" name="result"></div>
<script>
window.onload = (function(){
$("#click1").click(function(event) {
$.ajax({
url: 'test2.php',
type: 'POST',
data: 'n: term',
success: function(msg) {
$( "#result" ).empty().append( msg );
}
});
});
$("#click2").click(function(event) {
$.ajax({
url: 'test3.php',
type: 'POST',
data: 'n2: term',
success: function(msg) {
$( "#result2" ).empty().append( msg );
}
});
});
});
</script>
test2.php
<input type="text" name="n2" id="n2" placeholder="Search..." />
<button id="click2">Go</button>
<div id="result2" name="result2"></div>
test3.php
<?php
echo 'It´s working!';
?>
Мой последний вопрос: почему он не работает? Почему он не выводит "Это работает!" в конце?
Ответы
Ответ 1
Вы можете поместить еще один пост в обработчик успеха первого сообщения:
$("#click1").click(function(event) {
$.ajax({
url: 'test.php',
type: 'POST',
data: 'n: term',
success: function(msg) {
$( "#result" ).empty().append( msg );
$.ajax({/* params here */});
}
});
});
Ответ 2
Когда $("#click2").click(..);
запускается, элемент #click2
не существует, поэтому он не работает.
Вы можете перемещать $("#click2").click(..);
внутри обработчика success
для первого запроса, или вы можете использовать .live()
.
Ответ 3
Я считаю, что проблема заключается в использовании window.onload
в ответе AJAX. window.onload
уже запущен для окна. Вы не загружаете новое окно, чтобы оно не срабатывало. Попробуйте удалить это и посмотреть, работает ли он.
Ответ 4
Насколько я понял, вам нужно использовать live
с динамически добавленными элементами, такими как
$("#click2").live("click",function(){
//do ajax here
});
или вы можете использовать delegate
$("#result").delegate("#click2","click",function(){
// do the ajax here
});
jquery live
jquery delegate