2016-10-10 22 views
1

Safariで非同期Ajax呼び出しが機能しない問題が発生しています。他のすべてのブラウザで動作しますが、Safariでは動作しません。これは、Ajax関数を呼び出すためにクリックされたボタンまたはアンカーにリダイレクト/リンクがある場合にのみ問題になります。私は以下の本当に簡単な例を作成していリダイレクトでSafariで非同期Ajaxが機能しない

:dosomething.phpは、この例の

<?php 

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

?> 

ライブバージョンが

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

であるここにある:http://visionfactor.com.au/ajax-safari/

がであるがhref = Ajaxは常にエラーを吐き出します。すぐに私はhrefを削除するように動作します。アンカーの代わりにボタンを使用し、代わりにJavascriptでリダイレクトする場合も同じです。同じ結果がリダイレクトされている間は同じです。

私はリダイレクトをAjaxの成功のコールバックに入れることができますが、他のすべてのブラウザと同じようにSafariで他の方法と同じように動作するはずなので、不要と思われます。また、私が実際に使っているコードでは、複数のリンク/ボタンに対して同じクラスを持つので、同じAjaxを実行しますが、それぞれ別の場所にリダイレクトするので、これを行うコードは面倒です。だから私は、そのリンクに関連するリダイレクトを定義するために、別のクラスなどいくつかの他の値を渡さなければなりません。

この単純なコードをSafariで動作させるにはどうすればよいですか?

おかげで、このようpreventDefaultを追加する ニコール

+1

Firefoxは、 "Ajaxのエラーは、" すぐにその後、PAGE2が表示されたポップアップ表示 - それは完全に可能だ –

+0

**が**何のリダイレクトが起こっていませんそのサファリは、デフォルトのクリックアクションを打ち切ります。なぜなら、ajaxが実行されているからです。あなたは、ブラウザーが望むようにして、一貫していることを望むよりも、望ましい動作をより明確にする必要があります。 – apokryfos

+1

dosomething.phpにエラーがあります。 'return false;'を試してみてください。ajax呼び出しの後でコードのトラブルシューティングを行います。 – progrAmmar

答えて

0

試してみてください。

$(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

こんにちはmmm、私はあなたが私の問題を理解しているか分からない。私はURLにリダイレクトし、バックグラウンドでajax asyncを実行します。 URLに移動したくない場合は、URLを削除して、Ajaxは正常に動作します。 – nicole2292

+0

私は、デフォルトのイベントを防止し、元のリンクからhrefを取得し、ajaxの成功関数でその場所にリダイレクトすることに基づいて、大まかに解決策を見つけました。しかしこれはちょっと面倒ですが...もっと良い解決策があるはずですが、少なくともこれが機能しているように感じます。 – nicole2292

関連する問題