我正在尝试在我的项目中实现jQuery Address插件。
我正在关注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页面),它就会解析并显示我的404消息。
答案 0 :(得分: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');
答案 1 :(得分: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();
答案 2 :(得分:0)
搞定了。我用以下内容替换了$ .ajax()调用:
$('.content').load('/index.php?ACT=87&action=shows&_escaped_fragment_=' + encodeURIComponent(event.value) +' #content');
仍然有兴趣知道是否有人能告诉我我用$ .ajax()做错了什么。