在IE,FF和Safari中运行Ajax

时间:2010-09-16 05:48:49

标签: javascript ajax

我正在尝试创建与天气xml Feed的ajax连接,然后解析返回的数据。我没有任何问题通过IE建立连接,但由于某种原因我在FF或Safari没有任何运气。基本上我正在做的是运行包含以下代码的html文件。

<html> 
<script type="text/javascript" language="javascript">

    function makeRequest(zip) {  
    var url = 'http://rdona.accu-weather.com/widget/rdona/weather-data.asp?location=' + zip;
         //var httpRequest; 
    var httpRequest = false; 

         if (window.XMLHttpRequest) { 
    document.write("xmlhttprequest");
        httpRequest = new XMLHttpRequest();  
             if (httpRequest.overrideMimeType) {  
                 httpRequest.overrideMimeType('text/xml');  
                 // See note below about this line  
             }  
         }   
         else if (window.ActiveXObject) { // IE  
             try {  
                 httpRequest = new ActiveXObject("Msxml2.XMLHTTP");  
             }   
             catch (e) {  
                 try {  
                     httpRequest = new ActiveXObject("Microsoft.XMLHTTP");  
                 }   
                 catch (e) {}  
             }  
         }  

         if (!httpRequest) {  
             alert('Giving up :( Cannot create an XMLHTTP instance');  
             return false;  
         }  
         httpRequest.onreadystatechange = function() { alertContents(httpRequest); };  
         httpRequest.open('GET', url, true);  
         httpRequest.send('');  

     }  

     function alertContents(httpRequest) {  

         if (httpRequest.readyState == 4) {  
             if (httpRequest.status == 200) {  
                alert(httpRequest.responseText);  
             } else {  
                 alert('There was a problem with the request.');  
             }  
         }  

     } 

makeRequest(84405); 
</script>  
</html>

非常感谢任何帮助或建议。

3 个答案:

答案 0 :(得分:1)

我强烈建议您使用框架来执行此类操作。 Frameworks将为您完成所有浏览器兼容性工作。

另一方面,如果你对如何做这个学术活动感兴趣...仍然有一个框架!看看框架是如何做到的,你将立即了解所有的陷阱。

Mootools is my framework of choice

要在Mootools中执行基本的AJAX请求,您需要执行以下操作:

window.addEvent('domReady', function() {
    new Request({
        'url': "The url where you want to send the request
        'data': "Some data to send. It can be an object."
    }).send();
});

可以找到Request类的完整文档here

如果您想了解Mootools如何实现跨浏览器AJAX,您可以找到Request类here的来源。

您会发现Browser.Request的来源特别有用。

答案 1 :(得分:1)

由于same origin policy,我担心你会遇到一些问题,这意味着你无法将XMLHTTPRequests转到另一个域。

即使jQuery(你真的应该检查出来)也不能帮助你。

答案 2 :(得分:0)

对于跨浏览器的东西,我建议你使用像JQuery这样的库,因为它会在IE与Firefox和Safari等问题上悄然平滑。另外,要正确制作代码格式,请使用工具栏中的101010按钮。