Ajax不使用Href(解决方案)

时间:2012-02-22 16:52:02

标签: javascript html ajax

我在尝试查找为什么我的ajax功能无法在Safari,Chrome和Firefox上运行时遇到很多问题,但在IE上工作得非常好。我做了一点改变,一切都开始完美(在每个浏览器中),但我仍然不知道为什么,我想找出这个的主要原因。

我有一个Ajax函数respuestas(),它在数据库中插入一些数据。此功能由以下某些链接调用:<a onclick="respuestas()" href="link.html">LINk </a>。因此,当我单击链接时,该函数会获取正确的信息并将其插入数据库,然后转到link.html。同样,这只适用于IE。

我插入alert(xml.responseText)以查看我的回复。 Safari,fireforx和chrome会返回一个空警报。

我厌倦了每次想要测试我的功能时更改页面,所以我添加了一个按钮来调用我的功能(没有去另一个网页)和IT工作!现在,我有这样的事情:<a onclick="respuestas()" href="#">LINK </a>并将window.location.href="link.html"放在我的ajax函数中,因此页面的更改在ajax响应完成后发生,并且它运行良好。

但是我并不完全理解为什么会这样,而另一种方式则不然。

3 个答案:

答案 0 :(得分:5)

这是因为link元素也是它的默认监听器。因此,为防止对点击执行任何额外操作,您应该阻止默认操作。执行此操作的简单方法是在单击时返回false。

<a onclick="respuestas(this); return false;" href="link.html">LINk</a>

最简单的respuestas应该是这样的:

function respuestas(link) {

   /* do what you need here */

   window.location.href = link.href;
}

这很原始,但我相信你会明白这一点。

答案 1 :(得分:1)

这里发生的事情是您的浏览器在repusetas()能够执行之前导航到下一页。为了确保在浏览器跟踪链接之前触发脚本,您需要控制click事件。在jQuery中它的工作原理如下:

$('a').bind( 'click', function( event ){
    event.preventDefault();
    repuestas();
    var href = $(this).attr('href');
    window.location.href = href;
});

答案 2 :(得分:1)

试试这个Jquery代码

function respuestas()
{
$.ajax({
        type: "post",
        url: "insert.php?data="+data,

        success  : function(data){
             window.location.href="link.html";
        },
        error    : function(){
             alert("Could not ");
        }

         });

}