异步Ajax无法在Safari中使用重定向

时间:2016-10-10 07:55:27

标签: javascript php jquery ajax safari

我遇到了在Safari中无法运行的异步Ajax调用的问题。它适用于所有其他浏览器,但不适用于Safari。当我们在按钮或锚点上有一个重定向/链接被点击以调用Ajax函数时,这只是一个问题。

我在下面创建了一个非常简单的例子:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Ajax issue is Safari</title>
<script src="//code.jquery.com/jquery-2.2.3.js"></script>
<script>
 $( document ).ready(function() {
    $('#mybutton').click(function(){
        $.ajax({
            type: "POST",
            dataType: "text",
            async: true,
            url: "dosomething.php",
            error: function(a,b,c){
                alert("Ajax Error");
            },
            success: function(data){
                alert(data);
            },
        });
    });
}); 
</script>
</head>
<body>
<a href="page2.php" id="mybutton">Click here</a>
</body>
</html>

dosomething.php在哪里

<?php 

echo "Success. Click ok to be redirected.";

?>

此示例的实时版本位于:http://visionfactor.com.au/ajax-safari/

虽然有一个href = Ajax总会吐出一个错误。一旦我删除href它将工作。如果我使用按钮而不是锚点并使用Javascript重定向,也是如此。同样的结果是重定向到位。

现在我意识到我可以将重定向放在Ajax成功回调中,但是我不想这样做,因为它似乎没有必要,因为它应该像其他所有浏览器一样在Safari中以其他方式工作。另外在我的真实世界(非简化)代码中执行此操作非常混乱,因为我有多个链接/按钮的相同类,因此它们都执行相同的Ajax但随后每个重定向到不同的位置。那么我将不得不通过其他一些值,例如另一个类,以便定义特定于该链接的相关重定向...就像我说的那样凌乱。

如何在Safari中使这个非常简单的代码工作?

谢谢, 尼科尔

1 个答案:

答案 0 :(得分:0)

尝试像这样添加preventDefault

$( document ).ready(function() {
    $('#mybutton').click(function (event) {

        event.preventDefault(); // stop the click to redirect to the URL in href

        $.ajax({
            type: "POST",
            dataType: "text",
            async: true,
            url: "dosomething.php",
            error: function(a,b,c){
                alert("Ajax Error");
            },
            success: function(data){
                alert(data);
            },
        });
    });
});