Адрес jQuery + $ .ajax не отображает контент - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь реализовать плагин jQuery Address в моем проекте.

Я следую примеру Asual реализации Crawling (т.е. hashbangs).

Мой JavaScript:

<script type="text/javascript">
    $.address.init(function(event) {
        // Initializes plugin support for links
        $('a:not([href^=http])').address();

        var handler = function(data) {
            $('.content').html($('#content', data).html()).parent().show();
            $.address.title(/>([^<]*)<\/title/.exec(data)[1]);
        };

        // Loads the page content and inserts it into the content area
        $.ajax({
            url: '/index.php?ACT=87&action=shows&_escaped_fragment_=' + encodeURIComponent(event.value),
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                handler(XMLHttpRequest.responseText);
            },
            success: function(data, textStatus, XMLHttpRequest) {
                handler(data);
            },
            contentType: 'text/html'
        });
    });
</script>

Вызов $ .ajax () запрашивает фиктивную HTML-страницу, которую я создал:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
    <head><title>testing</title>
    </head>
    <body>
    <div id="content">test</div>
    </body>
</html>

Я отправляю эту HTML-страницу с типом контента text/html.

Запрос выполняется успешно, и анонимная функция-обработчик получает данные всей страницы, но команда $('.content).html() не работает. Когда я делаю alert($('#content', data).html());, я получаю null, и ничего не происходит. Нет ошибок, но нет и контента.

На данный момент я почти сошел с ума ... какие-нибудь рекомендации?

Редактировать: Чтобы уточнить, проблема не в самом запросе, ни в URL-адресе, ни в проблеме безопасности браузера. Я просто не могу выбрать и отобразить данные из моего запроса на странице.

Что еще хуже, если я просто заменю URL-адрес $ .ajax () на страницу, которую, как мне известно, не существует (т. Е. Страницу 404), он просто анализирует и отображает мое сообщение 404.

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Я думаю, возможно, вы используете контекст селектора.

$('#content', data)

Это не работает, потому что data - это не объект jQuery, это просто HTML.

Три варианта, которые я могу придумать:

1)

//not sure if you can just wrap data within the selector so putting it in a variable
var myhtml = $(data);
$('#content', myhtml)

2) Пусть ваша пустая HTML-страница будет только #content div.Вам не нужно иметь полную страницу, если вы получаете только через ajax.

3) Попробуйте реструктурировать свой код, чтобы использовать функцию jQuery.load , которая позволяет вамуказать селектор, чтобы просто получить определенный фрагмент содержимого из загруженного файла $('#result').load('ajax/test.html #container');

1 голос
/ 08 декабря 2011

Ваш ajax в порядке.

Я не смог получить другие ответы для работы с JSFiddle, но это работает.Я сомневаюсь, что это лучший способ сделать это:

var handler = function(data) {
    // Create jQuery object with received data
    var $content = $('<div></div>').html(data); 

    // Get the html that you wanted   
    var theHtml = $('#content', $content).html();

    // Place content into page proper
    $('.content').html(theHtml).parent().show();

    // Rest of function...
}

Здесь все в одной строке, если вы один из тех мазохистских типов:

$('.content').html($('#content', $('<div></div>').html(data)).html()).parent().show();
0 голосов
/ 08 декабря 2011

Получил это работает.Я заменил вызов $ .ajax () следующим:

$('.content').load('/index.php?ACT=87&action=shows&_escaped_fragment_=' + encodeURIComponent(event.value) +' #content');

Было бы интересно узнать, может ли кто-нибудь сказать мне, что я делаю неправильно с $ .ajax ().

...