有没有办法调用网址并使用javascript获取响应?
我需要相当于ASP.NET:
WebRequest req = HttpWebRequest.Create("http://someurl.com");
WebResponse webResponse = req.GetResponse();
我有一个外部网址,其中包含我需要的一些信息,我想从javascript中调用此网址并解析响应,以确定在我的应用程序中要执行的操作。
答案 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的代理供您使用。