jQuery.post () внутри jQuery.post () - PullRequest
10 голосов
/ 30 июля 2011

Представьте себе сайт, на котором контент загружается через меню с использованием 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, и это не работает из-за тех же идентификаторов ... это не Начало здесь ; -)

Но даже если я связываю с ней совершенно новую страницу с новыми идентификаторами, она не работает ...

Можно ли добавить новый 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!';
?>

Мой последний вопрос: почему это не работает? Почему не выводится "Это работает!" в конце?

Ответы [ 4 ]

12 голосов
/ 30 июля 2011

Вы можете поместить другое сообщение в обработчик успеха первого сообщения:

$("#click1").click(function(event) {
    $.ajax({
        url: 'test.php',
        type: 'POST',
        data: 'n: term',
          success: function(msg) {
            $( "#result" ).empty().append( msg );

            $.ajax({/* params here */});
          }
     });
});
1 голос
/ 30 июля 2011

При выполнении $("#click2").click(..); элемент #click2 не существует, поэтому он не работает.

Вы можете переместить $("#click2").click(..); внутрь обработчика success для первого запроса,или вы можете использовать .live().

0 голосов
/ 30 июля 2011

насколько я понял, вам нужно использовать live с динамически добавленными элементами, такими как

$("#click2").live("click",function(){

//do ajax here

});

, или вы можете использовать delegate

$("#result").delegate("#click2","click",function(){

// do the ajax here

});

jquery live

jquery delegate

0 голосов
/ 30 июля 2011

Я считаю, что проблема заключается в использовании window.onload в ответе AJAX. window.onload уже выстрелил в окно. Вы не загружаете новое окно, поэтому оно не будет запущено. Попробуйте удалить это и посмотреть, работает ли это.

...