2011-09-28 200 views
3

我试图理解 - 是否有任何方法让浏览器在用户点击时不刷新整个页面。看到哈希添加方法 - 我需要另一种方法,使用没有哈希的链接。 可能是任何头文件应该发送?或者别的什么?如何让浏览器在刷新URL时不刷新整页?

我想处理GET查询只返回HTML(或特殊js命令)的一部分,而不是所有的页面,并以AJAX风格处理它。

+0

您对Javascript或AJAX有任何经验吗?你的问题不是很清楚,但试着学习AJAX,然后尝试自己写一些东西。如果您的代码存在特定问题,请发布有关此问题的新问题,我们可以帮助您更好地完成此任务。 –

回答

3

你可以通过jquery ajaxify你的链接。事情是这样的:

$('a.ajax').click(function(ev){ 
    ev.preventDefault(); 
    var target=$(this).attr('data-target'); 
    var url=$(this).attr('href'); 
    $(target).load(url+' '+target); 
} 

这可以在传导被用来与下面的HTML:

<div id="output"> 
Hello <a href="world.html" class="ajax" data-target="#output">World</a> 
<div> 

和内部world.html你需要有:

<div id="output"> 
    Foo bar baz boo 
</div> 

理论上,这应该从第一个文件中将“world”文件的内容加载到div中,但我没有尝试过。我认为这是你需要的,因为正常的链接仍然存在,谷歌会正确地索引这个旁路的Ajax,你的用户会很高兴看到页面部分改变。

1

你可以把“假”链接做这样的事情:

<span style="cursor:pointer;" onclick="loadPage('mypagename');">My Link</span> 

功能则是:

function loadPage(pageName){ 
    // do ajax call here using pageName var 
} 
1

当用户使用URL单击超链接时,无法禁止导航。使用散列值导航或让超链接调用JavaScript通常是在单个页面内添加导航的方式。

但是,如果您尝试将转换为现有的页面不是以此方式设计的,则必须使用JavaScript来修改超链接,以便它们调用Ajax。例如:

var links = document.getElementsByTagName('a'); 
for (var i = 0; i < links.length; i++) { 

    var oldUrl = links[i].getAttribute('href'); 
    links[i].setAttribute('href', 'javascript:void(0)'); 

    links[i].onclick = (function(url) { 
     return function() { 
      // Then you can do your AJAX code here 
     } 
    })(oldUrl); 
} 

我建议你不要做这样的事情,虽然,相当与一个AJAX的设计考虑创建自己的网页。

+0

你的答案有点混乱。你说,“当用户用URL单击一个超链接时,你无法阻止导航”,然后继续描述如何这样做。我也不同意使用AJAX来创建页面。这就是所谓的渐进式增强。设计最低公分母的页面,然后在其上应用AJAX行为......除非我误解了你。 – Herbert

+0

我的答案显示如何制作超链接,使其不再包含URL,因此“您无法阻止导航”语句是正确的。我之所以设计AJAX,是因为尽管你可以通过AJAX检索页面并做选择性替换,但你请求的URL仍然会返回整个HTML文档,所以你不会让你的网站执行任何不同或更好的。 – Jacob

+0

您可以通过将单击事件绑定到链接并从事件处理程序**返回'false',而不删除url来覆盖浏览器行为。 – Herbert