Почему мой jQuery + AJAX перестал работать? - PullRequest
1 голос
/ 19 мая 2011

Я довольно новичок в JavaScript / jQuery / AJAX, поэтому я подозреваю, что проблема в некоторой опечатке, которую я не вижу. Это работало нормально, но в какой-то момент во время редактирования методы hide () + show () перестали работать (протестировано в Firefox + Chrome). Я много раз обдумывал это и не вижу, что случилось.

script.js

$(document).ready(function(){

    $('p').click(function() {
        $(this).hide();
    })

    $('#nav li a').click(function(){
        var toLoad = $(this).attr('href')+' #content';

        $('#content').hide('fast',loadContent);

        function loadContent() {
            $('#content').load(toLoad,'',showNewContent())
        }

        function showNewContent() {
                $('#content').show('normal');
        }
        return false;
    });
});

На моей странице index.html следующий скрипт включает в себя раздел <head>:

<script src="script.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

Вам необходимо включить jQuery , прежде чем ваш script.js.

Код JavaScript будет выполняться синхронно.В вашем примере $ - это (или, по крайней мере, должно быть) undefined, и, конечно, undefined не имеет методов, похожих на jQuery.

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

Вместо этого отбросьте (), чтобы передать только ссылку на функцию.

0 голосов
/ 19 мая 2011

Измените ваш index.html материал на

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script src="script.js"></script>

и ваш код в script.js для:

$(document).ready(function(){

  $('p').click(function() {
    $(this).hide();
  })

  $('#nav li a').click(function(){
    var toLoad, loadContent, showNewContent; //keep the variable scope local
    toLoad = $(this).attr('href')+' #content';


    $('#content').hide('fast',loadContent);

    loadContent = function() {
        $('#content').load(toLoad,'',showNewContent)
    }

    showNewContent = function() {
            $('#content').show('normal');
    }
    return false;
  });
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...