我的話題已經在這裏被廣泛覆蓋。我搜索了很多,並嘗試了很多代碼,但沒有找到任何有助於我解決我的具體情況。所以我想向社區提出這個問題。基於來自AJAX調用的響應,我如何擺脫javascript循環?
我正在構建一個頁面,其中有12個表單字段,我循環訪問這些字段並進行AJAX調用以測試數據庫的值。我的問題是,我需要停止我的循環,並根據來自我的AJAX調用的特定響應獲取用戶輸入。到目前爲止,我一直無法阻止我的循環,直到它結束。
這裏是我的形式:
<form name="claimForm">
<table>
<tr>
<td> <input type="text" id="icdcode1"></td>
<td> <input type="text" id="icdcode2"></td>
<td> <input type="text" id="icdcode3"></td>
<td> <input type="text" id="icdcode4"></td>
</tr>
<tr>
<td> <input type="text" id="icdcode5"></td>
<td> <input type="text" id="icdcode6"></td>
<td> <input type="text" id="icdcode7"></td>
<td> <input type="text" id="icdcode8"></td>
</tr>
<tr>
<td><input type="text" id="icdcode9"> </td>
<td> <input type="text" id="icdcode10"></td>
<td> <input type="text" id="icdcode11"></td>
<td> <input type="text" id="icdcode12"></td>
</tr>
<tr> <td colspan="4"> <input type="button" value="Check IDC Code" onClick="javascript:claimValidate();"></td></tr>
</table>
</form>
<div id="pageresponse"></span>
這裏是我的claimValidate功能:
function claimValidate() {
var isFound = false;
for (i = 1; i <= 12; i++) {
var icdcode = 'icdcode'+i;
if (!isFound) {
if(document.getElementById(icdcode)) {
var retrieved = document.getElementById(icdcode).value;
if (retrieved != "") {
if (ajaxCheck(retrieved)) {
}
} // end if retrieved
} // end if document.getElementbyId
} // end if !isFound
} // end claimValidate
,這裏是我的ajaxCheck功能
function ajaxCheck(icdcode) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
//alert(isFound)
resp = xmlhttp.responseText;
if (resp == icdcode) {
return true;
} else if (resp == "Search Failed") {
alert("You must enter a valid issue code.")
return false;
} // end if resp
if ((resp !== "Search Failed") && (resp.length > 0)) {
document.getElementById("pageresponse").innerHTML = resp;
return false;
}
} // end readystate
} // end onreadystatechange
xmlhttp.open("GET", "validate_idc_code.asp?q=" + icdcode, true);
xmlhttp.send();
} // end ajaxCheck
我的意圖是打出來的循環並停止,如果它在ajaxCheck中的最終if語句,但它不是,我不知道爲什麼。我向同事展示了我的代碼,他似乎認爲ajaxCheck實際上不會返回任何內容,因爲它是在單獨的函數中調用的。他建議將我所有的表單字段作爲一個數組傳遞給我正在做數據庫檢查的ASP頁面,但我不確定這是最佳解決方案。
我會感謝任何指導專家可以提供給我。
謝謝!
克里斯 -
你提到它已被廣泛覆蓋在這裏,你見過[這個問題](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call)?基本上你的'ajaxCheck'函數不能以這種方式返回一個在循環中使用的值。你需要重構一些。 –
你不能,除非你切換到使用同步調用,或分裂你的邏輯,以便在ajax調用的成功處理程序中執行「得到響應」邏輯。 –
感謝您的回覆。我還沒有看到@James Thorpe所鏈接的文章。這看起來是處理我想要完成的一個好方法。我會試試看。 – ChrisC