2017-10-19 31 views
-2

我對使用AJAX是全新的,我正在尋找動態生成一些信息來計算某些日期,但最終這並不重要。AJAX請求沒有被提交,但它的Javascript功能被稱爲

我需要將星期和年份發送到包含AJAX代碼的Javascript函數,該函數應根據指向的文件中找到的內容返回信息。

當我點擊一個按鈕,「運行計劃」它調用下面的代碼。但是,只會調用「訪問的函數。周=」+周+「年=」+年「的警報,而不會調用其他警報,這意味着它們未到達。請求也不行

可能有人請點我在正確的方向,或積極地發現在那裏我已經出了錯

非常感謝:?

<script> 

function autoCalculatePlanner(week, year){ 

alert("Accessed Function. Week = " + week + " Year = " + year); 
xhttp = new XMLHttpRequest(); 

xhttp.onreadystatechange = function() { 

    if (this.readyState == 4 && this.status == 200) { 
     alert("State Ready"); 
     document.getElementById("test").innerHTML = this.responseText; 
     alert("Document Submitted"); 
    } 
    else{ 
     document.getElementById("test").innerHTML = "Error"; 
    } 
    xhttp.open("GET", "ajax/auto_calculate_planner.php?week=" + week + "&year=" + year, true);; 
    xhttp.send(); 
}; 


} 



</script> 

更新

美國呃「不要恐慌」提供我的代碼的修改版本如下:

function autoCalculatePlanner(week, year) { 
alert("Accessed Function. Week = " + week + " Year = " + year); 
xhttp = new XMLHttpRequest(); 
xhttp.open("GET", "ajax/auto_calculate_planner.php?week=" + week + "&year=" + year, true);; 
xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     alert("State Ready"); 
     document.getElementById("test").innerHTML = this.responseText; 
     alert("Document Submitted"); 
    } else { 
     document.getElementById("test").innerHTML = "Error"; 
    } 
}; 
xhttp.send(); 
} 

這是非常有幫助的,至少現在引起迴應。但是,我收到「錯誤」消息,而不是提交任何內容。我試圖做我自己的研究,但我再也找不到如何解決這個問題。

有人請提供關於我可能出錯的地方的其他信息嗎?

可能需要的其他信息:

我想已經通過GET處理的文件名爲「Ajax」的子文件夾中找到。 如果來自該文件的代碼被建議發佈,我也會這樣做。

+1

你需要做更多的調試縮小問題下降。在瀏覽器中使用開發人員工具。看看控制檯。有沒有錯誤?看看網絡標籤。請求是否被髮送?它看起來像你期望的方式嗎?你有迴應嗎?它看起來像你期望的方式嗎? – Quentin

+0

提供[mcve]。你已經顯示了腳本,但沒有關於如何調用該函數的上下文。你在使用鏈接的onclick事件嗎?這會導致瀏覽器在收到響應之前離開。你需要提供一個完整的[mcve]。 – Quentin

+0

您已標記此[tag:php]。爲什麼?問題中沒有PHP。 – Quentin

回答

1

您實際上沒有執行請求,直到您的onreadystatechange回調。如果請求沒有發生,狀態將永遠不會改變。

這是你的代碼的修正版本:

function autoCalculatePlanner(week, year) { 
    alert("Accessed Function. Week = " + week + " Year = " + year); 
    xhttp = new XMLHttpRequest(); 
    xhttp.open("GET", "ajax/auto_calculate_planner.php?week=" + week + "&year=" + year, true);; 
    xhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      alert("State Ready"); 
      document.getElementById("test").innerHTML = this.responseText; 
      alert("Document Submitted"); 
     } else { 
      document.getElementById("test").innerHTML = "Error"; 
     } 
    }; 
    xhttp.send(); 
} 

Reference docs

+0

@DontPanic這真是太棒了,我一定會指出正確的方向。我沒有收到「錯誤」消息,所以有些東西仍然是錯誤的,但你肯定幫我解決了我的問題。謝謝!我會在5分鐘內接受這個答案。 – cmprogram

+0

很高興幫助。我添加了一個指向Mozilla參考的鏈接,並對代碼進行了小小的調整。 –

+2

@cmprogram我想你的意思是你*現在*獲得錯誤消息?如果是這樣,請檢查您的瀏覽器devtools,然後單擊網絡選項卡。你應該看到AJAX請求,點擊它查看標題和響應。你應該能夠看到那裏出了什麼問題。 –

1

它只是一個paranthesis問題,你必須調用xhttp.open和xhttp.send xhttp.onreadystatechange之外,內部沒有

function autoCalculatePlanner(week, year){ 
 
alert("Accessed Function. Week = " + week + " Year = " + year); 
 
xhttp = new XMLHttpRequest(); 
 

 
xhttp.onreadystatechange = function() { 
 

 
    if (this.readyState == 4 && this.status == 200) { 
 
     alert("State Ready"); 
 
     document.getElementById("test").innerHTML = this.responseText; 
 
     alert("Document Submitted"); 
 
    } 
 
    else{ 
 
     document.getElementById("test").innerHTML = "Error"; 
 
    } 
 
    
 
}; 
 
xhttp.open("GET", "ajax/auto_calculate_planner.php?week=" + week + "&year=" + year, true);; 
 
    xhttp.send(); 
 

 
}