2011-10-04 45 views
0

我正在嘗試對ASP頁面執行簡單的AJAX調用,這會重置會話變量並在完成時發佈一條小消息。我這樣做純粹是爲了學習AJAX。AJAX/ASP - 簡單的任務但我卡住了?

這個例子來自於W3學校的網站,但自從將它應用到我的頁面後,我似乎無法使其工作,並且沒有產生任何錯誤,這很煩人,因爲我無法調試它。

這是我的JS,被稱爲當用戶點擊一個按鈕[清除表單]:

function resetSearchForm() 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
{ 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{ 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
document.getElementById("notification").innerHTML=xmlhttp.responseText; 
document.getElementById('notification').style.visibility = 'visible'; 
} 
} 
xmlhttp.open("GET","clearSearchData.asp",true); 
xmlhttp.send(); 

document.searchFrm.searchStr.value=''; 
document.searchFrm.vertical.checked = true; 
document.searchFrm.horizontal.checked = true; 
document.getElementById('dateRange').selectedIndex = 0; 
document.searchFrm.searchStr.focus(); 
} 

這是ASP(clearSearchData.asp),可清除我的會話變量,並寫入一條消息:

Response.Expires = -1 
Session("search-str-boolean") = "" 
Session("search-str-plain") = "" 
Session("date-range") = "" 
Session("date-from") = "" 
Session("date-to") = "" 
Session("specificDate") = "" 
Session("peopleStr") = "" 
Session("orientation") = "" 

Response.Write "Form has been reset" 

任何人都可以看到我要去哪裏錯了嗎?我一直在看它很長一段時間,我只是看不到它。

函數本身的工作原因是函數的最後部分得到處理,清除表單值的位......但是...... AJAX調用不會發生,因爲會話變量仍然包含數據並且消息不會不會出現。

許多在此先感謝...


UPDATE - - - - - - - - - - -

現在的作品。問題是我沒有包含ASP頁面的完整URL。感謝'thedaian'(下)指出這一點

+1

在onreadystatechange函數的某處粘貼警報(「某事」)行,以查看它是否實際上被調用。另外,使用Firebug或現代瀏覽器開發工具進行調試。強制使用jquery評論。 – thedaian

+0

我在'onreadystatechange'函數中添加了alert(),所以我假設AJAX已經工作 – TheCarver

+0

愚蠢的問題,但我必須問:你有一個id爲'notification'的元素來顯示ajax響應嗎? – bfavaretto

回答

1

很可能是,您試圖通過AJAX獲取的頁面出現問題。檢查xmlhttp.status是什麼,如果它是404,那麼你永遠不會達到打印AJAX響應的程度。確保"clearSearchData.asp"可以從與您的javascript相同的目錄訪問。如果您的JavaScript代碼位於網站其他部分的單獨文件夾中,則這是一個常見問題。或者簡單地輸入"clearSearchData.asp"的完整URL路徑,這樣它肯定會工作。

需要指出的是,在代碼中聲明後,xmlhttp.onreadystatechange中的函數(通常)被稱爲。在這種情況下,在您的搜索表單字段被清除並重置後,它會被調用。

+0

感謝thedaian。我有一個404錯誤,你是對的,我努力找出確切的問題,但努力奮鬥 – TheCarver

+0

我添加了完整的網址,它的工作,謝謝戴安:) – TheCarver

+0

很高興知道它的工作!可能值得檢查一下jQuery,它使ajax成爲單行功能,或者至少在大多數現代瀏覽器中使用開發人員工具。 (這樣做至少可以讓你自己做一次,但像jQuery這樣的東西對於更大的項目很有用) – thedaian

0

ajax調用不會自動發送會話cookie。這意味着您正在清除的會話不是用戶的會話,而是僅爲該Ajax呼叫創建的會話。

+1

謝謝門諾。但是,即使Session變量沒有清除,Response.Write「Message」也會出現嗎? – TheCarver

+0

真的夠了,應該的。您是否嘗試過使用Fiddler來查看ajax調用返回的內容? –