2012-07-17 54 views
1

我試圖讓跨域POST請求,並取回JSON編碼的響應,的XMLHttpRequest和setRequestHeader在IE中會返回一個錯誤

一切工作正常,除了在IE 7,8,9 我有嘗試的解決方案,但我得到這個錯誤:

Object doesn't support property or method 'setRequestHeader'

功能createXMLHTTPObject() - 嘗試1

function createXMLHTTPObject() { 
    var xmlhttp = false; 
     var is_IE = window.XDomainRequest ? true : false; 
     if (is_IE) { 
      xmlhttp = new window.XDomainRequest(); 
     } else { 
      if (window.XMLHttpRequest) { 
       xmlhttp = new XMLHttpRequest(); 
      } else { 
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     } 
    return xmlhttp; 
} 

功能createXMLHTTPObject() - 嘗試2

var XMLHttpFactories = [ 
    function() { return new XMLHttpRequest() }, 
    function() { return new ActiveXObject("Msxml2.XMLHTTP") }, 
    function() { return new ActiveXObject("Msxml3.XMLHTTP") }, 
    function() { return new ActiveXObject("Microsoft.XMLHTTP") } 
]; 

function createXMLHTTPObject() { 
    var xmlhttp = false; 
    for (var i=0; i<XMLHttpFactories.length; i++) { 
     try { 
      xmlhttp = XMLHttpFactories[i](); 
     } 
     catch(e) { 
      continue; 
     } 
     break; 
    } 
    return xmlhttp; 
} 

功能的send()
這將返回錯誤的:req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');

function send(postData, callback) { 
    var url = 'http://domain.com/ajax-processing.php'; //url overlap 
    var req = createXMLHTTPObject(); 
    if (!req) return; 
    var method = (postData) ? "POST" : "GET"; 
    req.open(method, url, true); 
    req.setRequestHeader('User-Agent', 'XMLHTTP/1.0'); 
    if (postData) { 
     req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
    } 
    req.onreadystatechange = function() { 
     if (req.readyState != 4) return; 
     if (req.status != 200 && req.status != 304) { 
      console.log('HTTP error ' + req.status); 
      return; 
     } 
     callback(req); 
    } 
    if (req.readyState == 4) return; 
    req.send(postData); 
} 

這裏我所說的發送功能

var insert = 'id=1&type=insert'; 
CLib.send(insert, function(data) { 
    console.log(data); 
}); 

是否可以在IE中創建跨域請求?
如何在不使用jQuery等其他庫的情況下留下這部分內容?

+1

「XDomainRequest」沒有'.setRequestHeader'。請參閱[文檔](http://msdn.microsoft.com/en-us/library/ie/cc288060(v = vs.85).aspx) – Esailija 2012-07-17 17:07:50

+0

我無法在XDomainRequest上設置標頭? – Philip 2012-07-17 17:09:33

+0

不,你不能。 – Esailija 2012-07-17 17:10:20

回答

1

非常感謝@Esailija通知我,我無法使用XDomainRequest創建設置請求標頭。

所以我嘗試了其他方法和解決方案也終於回來了一個更簡單的方法:
更改POST請求GET和一切正常工作後,一些小的變化。

相關問題