2011-04-14 49 views
0

我有以下代碼在除IE外的每個瀏覽器中都有效。當點擊表單的提交按鈕時,我根本沒有從IE獲得任何迴應。ajax表單問題IE

形式有此值:onsubmit="sendform(this);return false;"

<script type="text/javascript"> 
    function makeRequest(url) { 
     var http_request = false; 
     if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
      http_request = new XMLHttpRequest(); 
     } else if (window.ActiveXObject) { // IE 
      try { 
       http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
      } catch (e) { 
       try { 
        http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
       } catch (e) {} 
      } 
     } 
     if (!http_request) { 
      alert('Giving up :(Cannot create an XMLHTTP instance'); 
      return false; 
     } 
     http_request.onreadystatechange = function() { 

      if (http_request.readyState == 4) { 
       if (http_request.status == 200) { 
        alert(http_request.status); 
        //alert(http_request.responseText); 
        toggleDiv('stylized'); 
        showtoggleDiv('success'); 
       } else { 
        alert('There was a problem with the request.'); 
       } 
      } 
     }; 
     http_request.open('GET', url, true); 
     http_request.send(null); 
    } 

    function sendform(el) { 
     var sub = el.getElementsByTagName('input'); 
     query = new Array(); 
     for (i in sub) { 
      if (sub[i].name) { 
       query.push(sub[i].name + '=' + sub[i].value); 
      } 
     } 
     query = '?' + query.join('&'); 

     makeRequest("http://markburnettinternational.com/sitelokpw/members/test.php" + query); 
    } 
</script> 
<script language="javascript"> 
    function toggleDiv(divid) { 
     if (document.getElementById(divid).style.display == 'none') { 
      document.getElementById(divid).style.display = 'block'; 
     } else { 
      document.getElementById(divid).style.display = 'none'; 
     } 
    } 
</script> 
<script> 
    function showtoggleDiv(divid) { 

     document.getElementById(divid).style.display = 'block'; 

    } 
</script> 

回答

0

打開瀏覽器的調試器,把一個斷點sendform(),並通過它走,看看會發生什麼。交替地打開JavaScript控制檯可以給你關於發生什麼事情的重要反饋。

0

至少有三個問題這段代碼:

var sub = el.getElementsByTagName('input'); 
query = new Array(); 
for (i in sub) { 
    if (sub[i].name) { 
     query.push(sub[i].name + '=' + sub[i].value); 
    } 
} 

首先,總是使用var局部範圍內聲明的變量,所以使用

var query = new Array(); 
for (var i in sub) { 

其次,getElementsByTagName返回NodeList,這是一個類似數組的對象。 千萬不要使用for … in循環遍歷數組(類對象),總是使用普通的for循環。

第三,始終使用encodeURIComponent正確編碼的查詢參數:

for (var i = 0, len = sub.length; i < len; i++) { 
    if (sub[i].name) { 
     query.push(sub[i].name + '=' + encodeURIComponent(sub[i].value)); 
    } 
} 

可能解決您的IE瀏覽器的問題。

+0

大家好..我提出了建議的mods,但IE仍未提交表單。我可以讓所有其他瀏覽器正常工作。我看過螢火蟲代碼,並試圖在IE中進行調試,但我看不到什麼是失敗..這幾乎就像ajax沒有初始化? – Nikon0266 2011-04-18 18:17:12

+0

不初始化?彈出'無法創建XMLHTTP實例'嗎?是否顯示狀態警報?你測試了哪些IE版本? – 2011-04-19 10:40:45