2009-01-06 43 views

Trả lời

8

Sử dụng jQuery (hoặc thư viện JavaScript tương tự). Nó sẽ chăm sóc các vấn đề tương thích trình duyệt chéo của những thứ như thực hiện cuộc gọi Ajax.

For example, sử dụng jQuery Ajax call:

$.ajax({ 
    url: 'document.xml', 
    type: 'GET', 
    dataType: 'xml', 
    timeout: 1000, 
    error: function(){ 
     alert('Error loading XML document'); 
    }, 
    success: function(xml){ 
     // do something with xml 
    } 
}); 
9

Dưới đây là một liên kết hữu ích và một số mã (nên bao gồm tất cả các căn cứ)

http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx

 var request = null; 

     function InitAJAX() 
     { 
      var objxml = null; 
      var ProgID = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Microsoft.XMLHTTP"];    

      try 
      { 
       objxml = new XMLHttpRequest(); 
      } 
      catch(e) 
      {     
       for (var i = 0; i < ProgID.length; i++) 
       { 
        try 
        { 
         objxml = new ActiveXObject(ProgID[i]); 
        } 
        catch(e) 
        {       
         continue; 
        } 
       } 
      } 

      return objxml;    
     } 

     request = InitAJAX(); 
+0

Trình duyệt chéo, bất kỳ ai? Tôi không nghĩ rằng các công trình trong Firefox. –

+2

@Bishiboosh - Nó hoạt động tốt trong Firefox - https://developer.mozilla.org/En/Using_XMLHttpRequest –

3

Sử dụng chỉ là về bất kỳ JavaScript Ajax thư viện là thích hợp hơn để viết khung Ajax của riêng bạn - trừ khi đó là vấn đề. Bạn có thể muốn kiểm tra khung công tác jQuery hoặc Prototype hoặc MooTools hoặc Dojo hoặc [chèn tên tại đây] để xem cách chúng thực hiện nếu bạn nhấn mạnh vào việc viết của riêng bạn.

11

Đối với một giải pháp thư viện ít hơn, bạn có thể bắt chước sử dụng Try.these Prototype của khá dễ dàng:

function newAjax() { 
    try { return new XMLHttpRequest();     } catch(){} 
    try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(){} 
    try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(){} 
    try { return new ActiveXObject('Msxml2.XMLHTTP');  } catch(){} 
    try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(){} 
    return false; 
} 
+0

Sạch sẽ và spartan. Có thể muốn "ghi nhớ" phiên bản được định vị để bạn không phải nhấn 1-4 ngoại lệ mỗi lần. – Nicholas

1

Đây là những gì tôi sử dụng, nó hoạt động tốt đối với tôi:

function request() 
    { 
     try 
     { 
      try 
      { 
       return new ActiveXObject("Microsoft.XMLHTTP") 
      } 
      catch(e) 
      { 
       return new ActiveXObject("Msxml2.XMLHTTP") 
      } 
     } 
     catch(e) 
     { 
      return new XMLHttpRequest() 
     } 
    } 
0

Tôi đi với Đề nghị của Cletus về jQuery và cũng kiểm tra trình cắm thêm jQuery Form, rất mạnh mẽ và đơn giản để sử dụng để nhanh chóng chuyển đổi các biểu mẫu của bạn để hoạt động thông qua Ajax.

8

tôi muốn đề nghị sau Sergey's advise hoặc viết một nhỏ, vá ít phức tạp cho IE tự hỏi:

if(typeof window.XMLHttpRequest === 'undefined' && 
    typeof window.ActiveXObject === 'function') { 
    window.XMLHttpRequest = function() { 
     try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {} 
     try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {} 
     return new ActiveXObject('Microsoft.XMLHTTP'); 
    }; 
} 

Sau đó, bạn có thể làm

var req = new XMLHttpRequest; 

ngay cả trong IE.

chỉnh sửa 2011/02/18: thấy this blogpost cho lý do đằng sau sự lựa chọn mới của các phiên bản MSXML ...

+0

liên kết tuyệt vời, sửa chữa đối tượng – Delta

0

chức năng CreateXmlHttpObj() {

try { 
    XmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP"); 
} 
catch (e) { 
    try { 
     XmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch (oc) { 
     XmlHttpObj = null; 
    } 
} 
// if unable to create using IE specific code then try creating for Mozilla (FireFox) 
if (!XmlHttpObj && typeof XMLHttpRequest != "undefined") { 
    XmlHttpObj = new XMLHttpRequest(); 
} 

}

Các vấn đề liên quan