2016-08-16 24 views
0

APIはライブ値と変更を頻繁に表示するため、毎秒電話してウェブページに表示しようとしています。ApiコールAjax n秒GETリクエスト

set_interval()を使用してN秒ごとにget要求呼び出しを試みましたが、値は1回だけロードされ、再度コールしません。

<p id="val"></p> 
<p id="val2"></p> 
<p id="val3"></p> 

<script> 
var xhttp = new window.XMLHttpRequest(); 
xhttp.open("GET", "http_url_link", true); 
xhttp.send(); 
xhttp.onreadystatechange = myFunction(xhttp); 

function myFunction() { 
    if (xhttp.readyState == 4) { 
     var xmlDoc = xhttp.responseXML; 
     var val1= xmlDoc.getElementsByTagName('value_1')[0].childNodes[0]; 
     var val2 = xmlDoc.getElementsByTagName('value_2')[0].childNodes[0]; 
     var val3 = xmlDoc.getElementsByTagName('value_3')[0].childNodes[0]; 
     document.getElementById('val3').innerHTML = 
     v3.nodeValue; 
     document.getElementById('val').innerHTML = 
     v1.nodeValue; 
     document.getElementById('val2').innerHTML = 
     v2.nodeValue; 
    } 
} 
myFunction(); 
setInterval(myFunction, (1000)); 
</script> 

答えて

1

するvar xhttp =新しいwindow.XMLHttpRequest();

ここでは、xhttpオブジェクトはスクリプトの実行中に一度作成してください。そして、一度正しい出力が得られます。 1秒後にこれを呼び出す必要があります。

function myFunction() { 
    var xhttp = new window.XMLHttpRequest(); 
    xhttp.open("GET", "http_url_link", true); 
    xhttp.send(); 
    xhttp.onreadystatechange = function(){ 
     if (xhttp.readyState == 4) { 
     var xmlDoc = xhttp.responseXML; 
     var val1=xmlDoc.getElementsByTagName('value_1'[0].childNodes[0]; 
     var val2 = xmlDoc.getElementsByTagName('value_2')[0].childNodes[0]; 
     var val3 = xmlDoc.getElementsByTagName('value_3')[0].childNodes[0]; 
     document.getElementById('val3').innerHTML=v3.nodeValue; 
     document.getElementById('val').innerHTML=v1.nodeValue; 
     document.getElementById('val2').innerHTML=v2.nodeValue; 
    } 
    } 

setInterval(myFunction,(2000)); 

私は、関数の中にあるものを4本のラインを入れた場合、それはちょうど私のブラウザをクラッシュ:)

+0

私は今CORSの問題で立ち往生しています。私はエラー 'アクセス制御なし'が表示されます。私はすべての異なるソリューションをウェブで試しました。 Javascriptでheader()をPHPとして追加します。運がない。あなたは同じコードのCORSの問題を並べ替える方法を知っていますか?その奇妙な1つの要求を取得しますが、複数のためにそれはCORSの問題を示しています –

0

これを試してみてください:API呼び出しを行うために

function myFunction() { 
    function foo(){ alert("Hello"); } 
    setTimeout(myFunction, 1000); 
    foo(); 
} 
myFunction(); 
0

コード関数の外です。

function myFunction() 
{ 
    var xhttp = new window.XMLHttpRequest(); 
    xhttp.open("GET", "http_url_link", true); 
    xhttp.send(); 
    xhttp.onreadystatechange = myFunctionRes(xhttp); 
} 
function myFunctionRes() 
{ 
    if (xhttp.readyState == 4) 
    { 
     var xmlDoc = xhttp.responseXML; 
     var val1= xmlDoc.getElementsByTagName('value_1')[0].childNodes[0]; 
     var val2 = xmlDoc.getElementsByTagName('value_2')[0].childNodes[0]; 
     var val3 = xmlDoc.getElementsByTagName('value_3')[0].childNodes[0]; 
     document.getElementById('val3').innerHTML = 
     v3.nodeValue; 
     document.getElementById('val').innerHTML = 
     v1.nodeValue; 
     document.getElementById('val2').innerHTML = 
     v2.nodeValue; 
    } 
} 
setInterval(myFunction, (1000)); 
+0

コーディングハッピー。そのオーバーロードを取得します。私はこれを克服する方法を知らない:/ –

+0

setIntervalは指定された時間後に連続して実行を続けるためです。 あなたがすべきことは、最初のAPI呼び出しが終了し、応答が処理されたときに、setTimeoutを使用して別のAPI呼び出しを行います。 – AmanSinghal

+0

コールバックはどうですか? (javascriptの神々が私にそれを言ってもらわないようにしてください) –

関連する問題