从javascript调用url

从javascript调用url,javascript,Javascript,有没有一种方法可以使用javascript调用url并获得响应? 我需要ASP.NET的等效版本: WebRequest req = HttpWebRequest.Create("http://someurl.com"); WebResponse webResponse = req.GetResponse(); 我有一个外部url,它保存了我需要的一些信息,我想从javascript调用此url并解析响应,以便确定在我的应用程序中执行的操作。如果url位于同一域中,例如,同一主机不同的应用程序

有没有一种方法可以使用javascript调用url并获得响应? 我需要ASP.NET的等效版本:

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

我有一个外部url,它保存了我需要的一些信息,我想从javascript调用此url并解析响应,以便确定在我的应用程序中执行的操作。

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

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


谢谢to@nickf,用于指出我的原始解决方案在url位于不同域时的明显问题。

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

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);
在jQuery中:

$.GET('url.asp', {data: 'here'}, function(data){ /* what to do with the data returned */ })
在普通javaScript中(来自w3c):


如果您需要检查外部页面,则无法使用纯javascript解决方案,因为对外部URL的任何请求都会被阻止。您可以通过使用JSONP来解决这个问题,但除非您请求的页面只提供JSON,否则这是行不通的

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

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

不要忘记包含对旧版IE的支持。当访问者访问支持旧版IE的站点时,不要忘记一个恼人的警告。是的,如果代码(甚至jquery)在旧浏览器中使用,就会出现问题。仅供参考:JavaScript只能与同一域通信。您可以通过JSON调用其他人,但最好使用代理。如果您想调用位于不同域甚至不同子域上的资源,您需要使用某种变通方法。请参阅Yahoo的PHP代理文件示例:Snook很好地概述了跨域进行AJAX调用的变通方法。看见
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");
        }
  }
}
<?php
$contents = file_get_contents($_GET['url']); // please do some sanitation here...
                                             // i'm just showing an example.
echo $contents;
?>