2012-11-17 70 views
0

我做這樣使用XDomainRequest爲IE跨域請求之外:要使用XDomainRequest的響應函數「負荷」

<div id="result"></div> 

<script type="text/javascript"> 
var urlToOpen; 
var openxUrl = "http://DOMAIN.com/www/delivery/apu.php"; 
if ($j.browser.msie && window.XDomainRequest) { 
     // Use Microsoft XDR 
     var xdr = new XDomainRequest(); 
     xdr.open("get", openxUrl); 
     xdr.onload = function() { 
      urlToOpen = xdr.responseText; 
     }; 

     xdr.send(); 
    } 

$j('#result').html(urlToOpen) 
</script> 

的代碼返回正確的值,但我想在其他函數中使用Ajax返回值(不僅在xdr.onload函數中),所以我需要用xdr.responseText返回的內容可以聲明爲全局或類似的東西。例如:最後一行$ j('#result')。html(urlToOpen)假裝分配「urlToOpen」的值,但這不起作用。我怎樣才能做到這一點?

回答

0

這裏的答案很簡單,使用移除XDR的var,然後它成爲全局對象的屬性。您隨後可以在任何地方訪問它。

我也命名空間它所以它不衝突,所以命名它像myApp_xdr

我希望這會有所幫助。

+0

不,它沒有工作。我在這裏複製我編輯代碼的方式。我得到警報(這意味着負載運行良好)。但「測試」的價值沒有打印出來,認爲它沒有被宣佈爲全球。 if($ j.browser.msie && window.XDomainRequest)myApp_xdr = new XDomainRequest(); myApp_xdr.open(「get」,openxUrl); myApp_xdr.onload = function(){ test =「test」; 警報(「alert worked」); }; myApp_xdr.send(); } $ j('#result')。html(test); – Saymon

+0

你做錯了,請檢查Chrome開發工具,並檢查參考,你走了,我相信這個小提琴證明我的問題的解決方案點:http://jsfiddle.net/bitoiu/78vCH/ – bitoiu

0

解決方案:由於「xdr.onload」以異步方式運行,問題在於,當此變量嘗試在代碼$ j('#result')。html(urlToOpen)中使用變量「urlToOpen」因爲「xdr.onload」沒有完成加載,所以我將代碼$ j('#result')。html(urlToOpen)放在「xdr.onload」函數中。這不是最好的,但工作。