2017-06-02 83 views
0

我想知道是否有可能使用JavaScript進行GET請求,因此它可以在不刷新頁面的情況下更新文本。是否可以通過javascript獲取請求?

如果這是可能的,我怎樣才能使用JavaScript獲取請求&得到結果/從json解碼它?

我想這從過去的問題:

function updateButton(){ 

    var xmlHttp = null; 

    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open("GET", "http://xxxx.com/getSpecialSale.php", false); 
    xmlHttp.send(null); 
    document.getElementById("dicebutton").innerHTML=xmlHttp.responseText; 
} 

而且,它完全停止主線程,使網站無法響應。哪裏不對?

+1

千萬不要錯過'FALSE'爲['xmlHttp'(https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open) –

+1

是異步設置爲假(第三個分頁ram of'.open'),所以它會鎖定用戶界面直到它完成。您的代碼需要修改才能使用async true。 – James

+0

是的 - 但爲什麼需要aysnc來獲取數據?這不是我擔心的表現,即使它應該在主線程中,腳本仍然無法正常工作。 – JavaC3code

回答

1

當前,您將async參數設置爲false,以便將請求發送到服務器,並且瀏覽器等待響應。爲了使一個異步請求,就像THRID PARAM true傳遞給open

xmlHttp.open("GET", "http://xxxx.com/getSpecialSale.php", true); 

除了這一點,你必須註冊一個回調,它等待響應(也許來處理錯誤。)

xmlHttp.onload = function (e) { 
    if (xmlHttp.readyState === 4) { 
     if (xmlHttp.status === 200) { 
      console.log(xmlHttp.responseText); 
     } else { 
      console.error(xmlHttp.statusText); 
     } 
    } 
}; 
xmlHttp.onerror = function (e) { 
    console.error(xmlHttp.statusText); 
}; 

除此之外的說明從Mozilla的文檔

注:與壁虎30.0開始(火狐30.0/30.0雷鳥/ SeaMonkey的2.27),第m同步請求ain線程已被 棄用,這是由於對用戶體驗的負面影響。

+0

他還需要將使用'responseText'的代碼移到回調函數中。 – Barmar

0

如果你想使用異步你需要一些代碼的修改,即發生在響應完成後需要是在一個回調函數如下東西:

function updateButton(){ 

    var xmlHttp = null; 

    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open("GET", "http://xxxx.com/getSpecialSale.php", true); 
    xmlHttp.onload = function() { 
     document.getElementById("dicebutton").innerHTML=xmlHttp.responseText; 
    }; 
    xmlHttp.send(null); 

} 
1
var isAjax=false; 
function updateButton(){ 
    if(!isAjax) { //Stops the user making a million requests per minute 
     isAjax=true; 
     var xmlHttp = null; 

     xmlHttp = new XMLHttpRequest(); 
     xmlHttp.open("GET", "http://xxxx.com/getSpecialSale.php", true); 
     xmlHttp.send(null); 
     document.getElementById("dicebutton").innerHTML=xmlHttp.responseText; 
     isAjax=false; 
    } 
} 

OR的jQuery ...

$("#btnUpdate").click(function(){ 
    $.get("http://xxxx.com/getSpecialSale.php", function(data, status){ 
     $("#dicebutton").html(data); 
    }); 
}); 
相關問題