2010-04-09 25 views
0

我正在使用登錄表單。 Ajax代碼如下:Ajax:Internet Explorer錯誤

/* ---------------------------- */ 
/* XMLHTTPRequest Enable */ 
/* ---------------------------- */ 

    function createObject() 
    { 
    var request_type; 
    var browser = navigator.appName; 
    if(browser == "Microsoft Internet Explorer"){ 
    request_type = new ActiveXObject("Microsoft.XMLHTTP"); 
    }else{ 
    request_type = new XMLHttpRequest(); 
    } 
    return request_type; 
    } 

    var http = createObject(); 

    /* -------------------------- */ 
    /* LOGIN */ 
    /* -------------------------- */ 
    /* Required: var nocache is a random number to add to request. This value solve an  Internet Explorer cache issue */ 
    var nocache = 0; 
    function login() { 
    // Optional: Show a waiting message in the layer with ID ajax_response 
    document.getElementById('login_response').innerHTML = "<img src='images/ispinner.gif'/>" 
    // Required: verify that all fileds is not empty. Use encodeURI() to solve some issues about character encoding. 
    var email = encodeURI(document.getElementById('emailLogin').value); 
    var psw = encodeURI(document.getElementById('pswLogin').value); 
    // Set te random number to add to URL request 
    nocache = Math.random(); 
    // Pass the login variables like URL variable 
    http.open('get', 'login.php?email='+email+'&psw='+psw+'&nocache = '+nocache); 
    http.onreadystatechange = loginReply; 
    if(window.XMLHttpRequest) 
    { 
    http.send(null); 
    } 
    else 
    { 
    http.send() 
    } 
    } 
    function loginReply() { 
    if(http.readyState == 4){ 
    var response = http.responseText; 
    document.getElementById('login_response').innerHTML = response; 
    } 
    } 

該代碼在谷歌瀏覽器和Mozilla Firefox中絕對正常。它只是不適用於IE 5和IE 6.我不明白爲什麼?

更新:代碼中實現了少數警報框。發現在Internet Explorer中的執行不超出

document.getElementById('login_response').innerHTML = "<img src='images/ispinner.gif'/>" 

是否有一些其他語法來獲取表單值?

+0

你應該使用jQuery。它會讓你的代碼更簡單。 – SLaks 2010-04-09 14:57:01

+0

Math.Random()是確保您的請求無法緩存的不佳方法。我會將其更改爲時間戳。 'var nocache =(new Date())。getTime()。toString();'。我第二次SLak評論,爲你的AJAX使用一個庫。 http://api.jquery.com/jQuery.get/ – 2010-04-09 15:02:06

+0

你如何稱呼你的登錄功能? – Gregoire 2010-04-09 15:22:44

回答

1

你的'nocache'querystring屬性的「=」符號有一些額外的空格。不知道IE如何處理這些。大概用「%20」來代替它們,這不太可能是你錯誤的根源,但它仍然是畸形的。

您可以用IE開發工具欄檢查/調試您的JavaScript,以確保您的所有對象都已正確創建嗎?

另請參閱我的關於請求緩存的評論。也許你有一個請求緩存,返回一個空的響應,所以它只顯示它不工作。

嘗試在你的回調函數中加入一些alert()函數,看看它是否到達那裏。

+0

我嘗試在代碼中實現一些警報框。結果是,代碼沒有到達以下行 var email = encodeURI(document.getElementById('emailLogin')。value); var psw = encodeURI(document.getElementById('pswLogin').value); – reggie 2010-04-09 15:15:02