2009-05-25 40 views
11

有没有方法可以调用url并获得使用javascript的响应? 我需要ASP.NET相当于:
从javascript调用url

WebRequest req = HttpWebRequest.Create("http://someurl.com"); 
WebResponse webResponse = req.GetResponse(); 

我拥有一些信息,我需要一个外部链接,我想从JavaScript调用这个网址和解析,以确定如何在做响应我的应用程序。

+4

仅供参考:JavaScript只能与同一个域进行通信。你可以逃脱JSON调用给其他人,但更好地使用代理。 – epascarello 2009-05-25 14:18:49

回答

15

如果url位于相同的域中,例如相同主机不同的应用程序,则可以发出AJAX请求。如果是这样,我可能会使用像jQuery这样的框架,最有可能的方法是get

$.get('http://someurl.com',function(data,status) { 
     ...parse the data... 
},'html'); 

如果您遇到跨域问题,那么最好的办法是创建一个代理为你请求一个服务器端的操作。使用AJAX请求服务器,请求服务器并返回来自外部主机的响应。

感谢@ nickf,如果URL位于不同的域中,用于指出原始解决方案的明显问题。

+0

由于跨域安全策略,这不起作用。 – nickf 2009-05-25 14:22:18

+4

惊人的缺失一个单词可以做一个职位.... – tvanfosson 2009-05-25 14:23:50

4
var req ; 

// Browser compatibility check   
if (window.XMLHttpRequest) { 
    req = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 

try { 
    req = new ActiveXObject("Msxml2.XMLHTTP"); 
} catch (e) { 

    try { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
    } catch (e) {} 
} 

} 


var req = new XMLHttpRequest(); 
req.open("GET", "test.html",true); 
req.onreadystatechange = function() { 
    //document.getElementById('divTxt').innerHTML = "Contents : " + req.responseText; 
} 

req.send(null); 
+1

不要忘记包括支持旧的IE浏览器。 – 2009-05-25 14:17:06

2

是的,你要求的是叫做AJAX或XMLHttpRequest。您可以使用像jQuery这样的库来简化调用(由于跨浏览器兼容性问题),也可以编写自己的处理程序。

在jQuery中:

$.GET('url.asp', {data: 'here'}, function(data){ /* what to do with the data returned */ }) 

在普通的香草使用Javascript(来自W3C):

var xmlhttp; 
function loadXMLDoc(url) 
{ 
    xmlhttp=null; 
if (window.XMLHttpRequest) 
    {// code for all new browsers 
     xmlhttp=new XMLHttpRequest(); 
    } 
else if (window.ActiveXObject) 
    {// code for IE5 and IE6 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
if (xmlhttp!=null) 
    { 
     xmlhttp.onreadystatechange=state_Change; 
     xmlhttp.open("GET",url,true); 
     xmlhttp.send(null); 
    } 
else 
    { 
     alert("Your browser does not support XMLHTTP."); 
    } 
} 

function state_Change() 
{ 
    if (xmlhttp.readyState==4) 
     {// 4 = "loaded" 
      if (xmlhttp.status==200) 
      {// 200 = OK 
      //xmlhttp.data and shtuff 
      // ...our code here... 
     } 
    else 
     { 
      alert("Problem retrieving data"); 
     } 
    } 
} 
2

如果您需要进行检查外部网页,你将无法使用逃脱纯JavaScript解决方案,因为任何对外部URL的请求都被阻止。你可以通过使用JSONP来避开它,但是除非你请求的页面只提供JSON,否则这是行不通的。

您需要在自己的服务器上有一个代理来获取外部链接。对于任何服务器端语言,这实际上都很简单。

<?php 
$contents = file_get_contents($_GET['url']); // please do some sanitation here... 
              // i'm just showing an example. 
echo $contents; 
?> 

如果您需要检查服务器响应代码(如:404,301,等),然后使用库如卷曲在你的服务器端脚本可以检索信息,然后把它传递到您的JavaScript应用程序。

现在想一想,如果“设置我自己的代理”选项不可行,那么可能会出现JSONP启用的代理,供您使用。