我在尝试查找为什么我的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响应完成后发生,并且它运行良好。
但是我并不完全理解为什么会这样,而另一种方式则不然。
答案 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 ");
}
});
}