2015-12-18 13 views
5

私はajaxを呼び出すJavaScript関数を持っています。今度は、サービスを呼び出している間にAjaxコールがタイムアウトしてデフォルトのメッセージを表示する時間を超えているように、この関数でタイムアウトを追加する必要があります。私はそれでJqueryを使用したくありません。コアのJavaScriptを使用しているときにajax呼び出しでタイムアウトを設定しました

AJAX = function (url, callback, params) { 
     var dt = new Date(); 
     url = (url.indexOf('?') == -1) ? url + '?_' + dt.getTime() : url + '&_' + dt.getTime(); 
     if (url.indexOf('callback=') == -1) { 
      ajaxCallBack(url, function() { 
       if (this.readyState == 4 && this.status == 200) { 
        if (callback) { 
         if (params) { 
          callback(this.responseText, params); 
         } else { 
          callback(this.responseText); 
         } 
        } 
       } 
      }); 
     } else { 
      var NewScript = d.createElement("script"); 
      NewScript.type = "text/javascript"; 
      NewScript.src = url + '&_' + Math.random(); 
      d.getElementsByTagName('head')[0].appendChild(NewScript); 
     } 
    }, 
    ajaxCallBack = function (url, callback) { 
     var xmlhttp; 
     if (window.XMLHttpRequest) { 
      xmlhttp = new XMLHttpRequest(); 
     } else { 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = callback; 
     xmlhttp.open("GET", url, true); 
     xmlhttp.send(); 
    } 

答えて

2

は、ここでは、タイムアウトを扱うことができる方法のexampleです:

var xmlHttp = new XMLHttpRequest(); 
xmlHttp.open("GET", "http://www.example.com", true); 

xmlHttp.onreadystatechange=function(){ 
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { 
     clearTimeout(xmlHttpTimeout); 
     alert(xmlHttp.responseText); 
    } 
} 
// Now that we're ready to handle the response, we can make the request 
xmlHttp.send(""); 
// Timeout to abort in 5 seconds 
var xmlHttpTimeout=setTimeout(ajaxTimeout,5000); 
function ajaxTimeout(){ 
    xmlHttp.abort(); 
    alert("Request timed out"); 
} 

はIE8では、あなたはXMLHttpRequestオブジェクトにタイムアウトイベントハンドラを追加することができます

は、ここに私のコードです。あなたが1つを使用していない理由を

var xmlHttp = new XMLHttpRequest(); 
xmlHttp.ontimeout = function(){ 
    alert("request timed out"); 
} 

あなたはuneccesary仕事好きです、私にはわからないけれども、これを行うにはJavaScriptのフレームワークを使用しますか? :)

+0

あなたの助けてくれてありがとう...しかし、上記のように私のコードで動作していません...私のコードを変更してください.... – Yogendra

+0

ビットを変更した後、それは今働いています。 – Yogendra

1

多分、この質問への答えは役に立ちます。私はあなたがXMLHttpRequestのためにタイムアウトを設定する必要があります理解して何から以来 Timeout XMLHttpRequest

、 あなたは単にタイムアウトを追加したい場合は、次の3つの場所で最初の関数でそれを追加することができxmlhttp.timeout = /*some number*/

+0

あなたの助けてくれてありがとう...しかし、上記のように私のコードで動作していません...私のコードを変更してください.... – Yogendra

2

を使用することができます。

 setTimeout(function() {callback(this.responseText, params)}, 1000) 

あなたのコールバックは約1秒後に実行されます。 2番目の位置はコールバックの2番目の呼び出しです。私はお勧めし

3位は、上記のように、この関数をラップすることです:

 ajaxCallBack(url, function() { 
      if (this.readyState == 4 && this.status == 200) { 
       if (callback) { 
        if (params) { 
         callback(this.responseText, params); 
        } else { 
         callback(this.responseText); 
        } 
       } 
      } 
     }); 

私は、インターネット接続をテストするに取得するときに通常私はむしろ、このようなChromeデベロッパーツールに絞る追加:

ここでenter image description here

は、最初のアプローチで、あなたのコードです:

 AJAX = function (url, callback, params) { 
       var dt = new Date(); 
       url = (url.indexOf('?') == -1) ? url + '?_' + dt.getTime() : url + '&_' + dt.getTime(); 
       if (url.indexOf('callback=') == -1) { 
        ajaxCallBack(url, function() { 
         if (this.readyState == 4 && this.status == 200) { 
          if (callback) { 
           if (params) { 
            console.log(new Date()); 
            setTimeout(function() {callback(this.responseText, params)}, 2000); 
           } else { 
            console.error((new Date()).getSeconds()); 
            setTimeout(function() {callback(this.responseText)}, 2000); 
           } 
          } 
         } 
        }); 
       } else { 
        var NewScript = d.createElement("script"); 
        NewScript.type = "text/javascript"; 
        NewScript.src = url + '&_' + Math.random(); 
        d.getElementsByTagName('head')[0].appendChild(NewScript); 
       } 
      }, 
     ajaxCallBack = function (url, callback) { 
       var xmlhttp; 
       if (window.XMLHttpRequest) { 
        xmlhttp = new XMLHttpRequest(); 
       } else { 
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       xmlhttp.onreadystatechange = callback; 
       xmlhttp.open("GET", url, true); 
       xmlhttp.send(); 
     } 

     AJAX('http://ip.jsontest.com/', function() {console.error((new Date()).getSeconds()); }); 
+0

どのようにそのGIFを作るのですか? – Matt

+1

Gyazo、それは簡単に短いGIFとスクリーンショットを作ることができます:) –

+0

あなたの助けてくれてありがとう...しかし、上のように私のコードで動作していない...私のコードを変更してください.... – Yogendra