0

我正在尝试在我的项目中实现 jQuery 地址插件。

我正在关注Crawling实现的 Asual 示例(即 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>

我正在发送带有text/html内容类型的这个 HTML 页面。

请求执行成功,处理程序匿名函数正在获取整个页面数据,但$('.content).html()命令不起作用。当我这样做时alert($('#content', data).html());,我得到了null,并且没有任何反应。没有错误,但也没有内容。

在这一点上,我几乎束手无策……有什么建议吗?

编辑:澄清一下,问题不在于请求本身,也不在于 URL,也不是浏览器安全问题。我根本无法从页面上的请求中选择和显示数据。

更糟糕的是,如果我简单地将 $.ajax() url 替换为我知道不存在的页面(即 404 页面)的 url,它会很好地解析并显示我的 404 消息。

4

3 回答 3

1

我认为这可能是您对选择器上下文的使用。

$('#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');

于 2011-12-07T20:46:36.437 回答
1

你的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();
于 2011-12-07T20:56:09.390 回答
0

得到它的工作。我将 $.ajax() 调用替换为以下内容:

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

仍然有兴趣知道是否有人可以告诉我我在 $.ajax() 上做错了什么。

于 2011-12-07T20:46:22.660 回答