0

我有一個函數可以根據數據庫驗證一個ID。如果找到該ID,則該函數返回true,否則返回false。Javascript在IE8中跨域請求

得到了在其他瀏覽器中工作的請求。現在正在研究與Internet Explorer的XDomainRequest。

function verify(id){ 
    xmlhttp=new window.XDomainRequest(); 
    xmlhttp.onload = checkResponse; 
    xmlhttp.open("GET", "http://abc.com/verify?id=" + encodeURIComponent(id)); 
    xmlhttp.send(); 

    function checkResponse(){ 
     if(xmlhttp.responseText == 200) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

問題是我想驗證函數返回false,而不是checkResponse函數。

在其他瀏覽器中,將open設置爲false會執行此操作,但不在IE中。

請不要回答jQuery。

感謝您的幫助!

+0

使得AJAX同步違背它的目的。 – Joseph

+0

你有其他建議嗎? – Enkay

回答

4

以下是將IE8中的CORS請求合併到jQuery中的建議方法。你也許可以以此爲起點,爲您自己的:

https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js

而且,verify不應該是一個同步操作。建議傳遞一個回調函數,並保持它的異步:

function verify(id, callback){ 
    var xmlhttp = new window.XDomainRequest(); 
    xmlhttp.onload = function() { 
     callback(xmlhttp.responseText === 200); 
    }; 
    xmlhttp.open("GET", "http://abc.com/verify?id=" + encodeURIComponent(id)); 
    xmlhttp.send(); 
} 

然後你可以調用像這樣:

verify(123456, function (isValid) { 
    if (isValid) { 
     // do something if valid 
    } else { 
     // or not 
    } 
}); 
+0

感謝您的回覆。我正在嘗試將這件事公之於衆。該函數是同步的,因爲它用於根據數據庫中的ID加載不同的UI。 – Enkay

+0

可能是這種情況,但是您將不允許用戶在頁面上進行任何交互。最好不要異步。 – Eli

+0

這是一個錯誤的答案,讓它的工作。謝謝 – Enkay

-2

您需要考慮的第一點是將您的js代碼更改爲非異步工作。否則,checkResponse是您必須得到答案的唯一一點。你的代碼似乎是異步的,它應該是同步的。

問候。

+0

你如何建議使它同步? – Enkay

+0

是的,絕對不建議使它同步。您將在等待回覆時阻止用戶界面。 – Eli

+0

檢查http://msdn.microsoft.com/en-us/library/cc288168%28v=vs.85%29.aspx中的信息,似乎您的呼叫無法支持同步呼叫,因此應該更改代碼,你應該使用回調函數。 – user1368365