最近支払いをしているときに、支払いウィンドウを開いたときにブラウザがブロックしていることに気付きました。何が起こりましたか? Ajax が新しいウィンドウを開いてブラウザーにインターセプトされる問題に対する 2 つの解決策を紹介します。最近、支払いを行っているときに、支払いウィンドウを開くときにブラウザーによってインターセプトされたことがわかりました。 Baidu で検索したところ、ウィンドウを開く前に ajax を使用して支払いができるかどうかを確認しているため、ユーザーが ixin ウィンドウを開くよう積極的にトリガーしなかったことが原因であることがわかりました。それはそれをブロックした。
解決策 1まず空の新しいウィンドウを開き、次に新しいウィンドウの URL を変更します。具体的なコードは
var wd = window.open(); $.ajax({ type: "POST", dataType: "json", url: URL, data: {orderNo:orderNo}, success: function(data) { if(data.status=='success'){ wd.location.href = 'http://www.baidu.com'; }else{ alert('订单不能支付!'); } },error: function(data) { alert("正在加载请稍后!"); } });
この実装方法には欠点があります。 ajax が存在するかどうか 成功すると、コード行 var wd = window.open(); が実行されるため、失敗後に閉じない限り、成功しても失敗しても新しいウィンドウが開きますが、このユーザー エクスペリエンスは非常に悪いので、2 番目の方法を使用してそれを達成します。
解決策 2ajax はデフォルトで非同期なので、パフォーマンスが高く、ユーザー エクスペリエンスが優れていますが、セキュリティの問題にもつながります。これにより、ブラウザーに新しいウィンドウのポップアップが安全であると認識させることができます。新しいウィンドウが同期される前に、すべての ajax を許可する必要があります。具体的なコードは
$.ajax({ type: "POST", dataType: "json", url: URL, async: false,//同步请求 data: {orderNo:orderNo}, success: function(data) { if(data.status=='success'){ window.open("www.baidu.com"); }else{ alert('订单不能支付!'); } }, error: function(data) { alert("正在加载请稍后!"); } });
です。これは、将来皆さんのお役に立てば幸いです。
関連記事:
重複実装用のAjax検証コードAjaxはphpcmsのような関数を実装する(グラフィックチュートリアル) Ajaxはページの読み込みとコンテンツの削除を実装する以上がAjax が新しいウィンドウを開いてブラウザに傍受される問題に対する 2 つの解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。