2016-10-10 17 views
1

我有問題,異步Ajax調用不工作在Safari中。它適用於所有其他瀏覽器,但不適用於Safari。當按鈕或錨點被點擊以調用Ajax函數時,這只是一個問題。異步Ajax無法在Safari中與重定向

我有下面創建一個非常簡單的例子:

<!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

的Firefox彈出然後迅速出現「阿賈克斯錯誤」第2頁 - 有**是沒有重定向發生** –

+0

這是完全可能Safari會中止默認的點擊操作,因爲有一個Ajax正在進行。你必須更加明確地表達所期望的行爲,而不是讓瀏覽器做他們想做的事情,並希望它們保持一致。 – apokryfos

+1

dosomething.php中有錯誤。嘗試'返回false;'在ajax調用並排除代碼故障後 – progrAmmar

回答

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); 
      }, 
     }); 
    }); 
}); 
+0

嗨 - 嗯,我不確定你是否理解我的問題。我希望它重定向到URL並在後臺執行ajax異步。如果我不想讓它去URL,那麼我會刪除網址,並且Ajax會正常工作。 – nicole2292

+0

我已經制定了一個鬆散的解決方案,基於阻止默認事件,然後從原始鏈接抓取href並重定向到ajax成功函數中的位置。這似乎工作,但它有點混亂...我仍然覺得應該有一個更好的解決方案,但至少這是工作。 – nicole2292