从javascript调用网址

时间:2009-05-25 14:12:31

标签: javascript

有没有办法调用网址并使用javascript获取响应? 我需要相当于ASP.NET:

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

我有一个外部网址,其中包含我需要的一些信息,我想从javascript中调用此网址并解析响应,以确定在我的应用程序中要执行的操作。

4 个答案:

答案 0 :(得分:19)

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

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

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

感谢@ nickf,指出我的原始解决方案存在明显问题,如果网址位于不同的域中。

答案 1 :(得分:5)

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);

答案 2 :(得分:2)

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

在jQuery中:

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

简单的vanilla 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");
        }
  }
}

答案 3 :(得分:2)

如果您需要检查外部网页,您将无法使用纯JavaScript解决方案,因为对外部网址的任何请求都会被阻止。您可以使用JSONP来逃避它,但除非您请求的页面仅提供JSON,否则这将无效。

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

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

如果您需要检查服务器响应代码(例如:404,301等),那么在服务器端脚本中使用诸如cURL之类的库可以检索该信息,然后将其传递到您的javascript应用程序。

现在考虑一下,如果“设置我自己的代理”选项不可行,可能会有支持JSONP的代理供您使用。