WeChatブラウザからajaxインターフェースにアクセスして10秒以内に自動再送します。

1866 ワード

2018-12-21更新:urlまたはajaxにconnect_を持つredirect=1というパラメータは、プロジェクトで遭遇した自動再送信される携帯電話は確かに再送信されませんでした。しかし、一部の携帯はまだ原文のアドレスを再送信します。https://developers.weixin.qq.com/community/develop/doc/b8f9f09573e92ffb0e23308d54bcdcf7 コメントエリア9階
=============================================================================================================以下を原文とします。
WeChat内资のブラウザでプログラムを呼び出すと、ネットワークが不安定になったり、サーバーの処理が遅くなったり、ajaxがサーバを呼び出して10秒も応答しないと、WeChatのブラウザはデフォルトで前回の要求を闭じて、新たな要求を起动します。日常的な照会処理では大丈夫かもしれませんが、注文などのデータが唯一必要なときは、次の注文が二回出てきます。しかも、毎回の間隔は10秒です。(一部は9秒の場合があります。少ないです。)ので、2つの方法を加えて1.ajaxタイムアウトを処理します。
ajaxTimeoutTest=$.ajax({
            url: "",
            type: "post",
            data: {
            },
            timeout : 8000, //      ,    
            datatype: "json",
            success: function (msg) {
            }
             error: function (msg) {
            },
            complete : function(XMLHttpRequest,status){ //           
                if(status=='timeout'){//  ,status  success,error     
                    ajaxTimeoutTest.abort();
                    alert("      ,        ");
                }
            }
ネットがよくない時、いつもデータが戻ってくるのではなくて、ユーザーにヒントを与えて、そして自発的にajaxを切断します。2.注文状況を確認する(注文例では、最も一般的なもの)再送信がない場合でも、注文を操作する時は注文書の状態を先に判断し、すでに支払いが完了したら前端に戻って支払いを成功させ、重複して支払わないでください。前に作ったシステムの中で、注文した時に注文書を生成していないで、最終的に支払いを確認した時に注文書が作られます。(なぜこのように設計されているのか分かりません。とりあえずこのようにします。)この時はsession(cookie)で判断できます。
		if(session().getAttribute("orderSessios")!=null){
            errorMsg = "             ";
            outJson(errorMsg);
            return;
        }else{
            session().setAttribute("orderSessios", "orderSession");
            session().setMaxInactiveInterval(60);// 
        }
コードは参考のみです。実際の業務によって判断ロジックを追加してください。