2016-05-03 14 views
1

私は非同期のAjaxリクエストを起動するツールをテストしていました。 1つの要求の応答は、別の要求の応答を中止できます。これは私がこれをテストした限り素晴らしい(Chrome、Firefox)が、Edgeは中断するのが好きではない! XmlHttpRequestがブロックされると、Edgeは失敗を起こします。これは起こりたくありません。XmlHttpRequestがアボートされたときにエッジトリガーが失敗する

xhr = $.ajax("my-url.php") 
    .done(function(json) { 
     var data = $.parseJSON(json); 
     if (data.data) { 
      // Yay data! 
     } else { 
      // Ahw no data or empty data 
     } 
    }) 
    .fail(function(jqXHR, textStatus, error) { 
     // This is triggered by Edge, `error` is "abort" 
     var string = "An error occurred: " + error + "."; 
     alert(string); 
    }) 
    .always(function() { 
     done = true; 
    }); 

ので、結果は警告でエラーが発生しました::中止

これは、コード(それは別のスニペットで中止されます)です。質問1:なぜはEdgeですか?それは他のブラウザとは異なる方法でXHRを処理しますか?標準は何ですか?次に、このメッセージが表示されないようにするにはどうすればよいですか?私は単純にfail()にこのような何かを、またはそのかなりこのついて行くの方法ではないことができます。

if (error != 'abort') { 
    // Do stuff, only when error isn't abort 
} 

答えて

0

私が何が起こるかを見ているようです。
これは(あなたからコピーされた)私のコードです:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta charset="utf-8" /> 
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     'use strict'; 
     var xhr, done; 
     function getResp() { 
      if (!done && xhr && xhr.readyState !== 4) 
       xhr.abort(); 
      done = false; 
      xhr = $.ajax("json.php",{method:'GET'}) 
// you didn't include method so method is 'GET' 
// when I change it to 'POST' Edge honors xhr.abort() 
       .done(function (json) { 
        console.log(json); 
        var data = $.parseJSON(json); 
        if (data.data) { 
         // Yay data! 
        } else { 
         // Ahw no data or empty data 
        } 
       }) 
       .fail(function (jqXHR, textStatus, error) { 
        // This is triggered by Edge, `error` is "abort" 
        var string = "An error occurred: " + error + "."; 
        //alert(string); 
        console.log(string); 
       }) 
       .always(function() { 
        done = true; 
       }); 
     } 
    </script> 
</head> 
<body> 
<input type="button" onclick="getResp()" value="run" /> 
</body> 
</html> 

と私のPHP:

<?php 
usleep(10000000); //10 seconds 
echo '{"name":"test","qty":10,"curr":"'.date('h:i:s').'"}'; 
?> 

一般的な答え:エッジキャッシュXHR GET応答し、すぐに戻ってデータを。 FFは要求をサーバーに送信します。それはすべての違いをもたらす。
POST要求はキャッシュされず、xhr.abort()の要求はすべてのブラウザで生成されます。
それは受け入れられる答えですか?

関連する問題