有没有方法可以调用url并获得使用javascript的响应? 我需要ASP.NET相当于:
从javascript调用url
WebRequest req = HttpWebRequest.Create("http://someurl.com");
WebResponse webResponse = req.GetResponse();
我拥有一些信息,我需要一个外部链接,我想从JavaScript调用这个网址和解析,以确定如何在做响应我的应用程序。
有没有方法可以调用url并获得使用javascript的响应? 我需要ASP.NET相当于:
从javascript调用url
WebRequest req = HttpWebRequest.Create("http://someurl.com");
WebResponse webResponse = req.GetResponse();
我拥有一些信息,我需要一个外部链接,我想从JavaScript调用这个网址和解析,以确定如何在做响应我的应用程序。
如果url位于相同的域中,例如相同主机不同的应用程序,则可以发出AJAX请求。如果是这样,我可能会使用像jQuery这样的框架,最有可能的方法是get。
$.get('http://someurl.com',function(data,status) {
...parse the data...
},'html');
如果您遇到跨域问题,那么最好的办法是创建一个代理为你请求一个服务器端的操作。使用AJAX请求服务器,请求服务器并返回来自外部主机的响应。
感谢@ nickf,如果URL位于不同的域中,用于指出原始解决方案的明显问题。
由于跨域安全策略,这不起作用。 – nickf 2009-05-25 14:22:18
惊人的缺失一个单词可以做一个职位.... – tvanfosson 2009-05-25 14:23:50
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);
不要忘记包括支持旧的IE浏览器。 – 2009-05-25 14:17:06
是的,你要求的是叫做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");
}
}
}
如果您需要进行检查外部网页,你将无法使用逃脱纯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启用的代理,供您使用。
仅供参考:JavaScript只能与同一个域进行通信。你可以逃脱JSON调用给其他人,但更好地使用代理。 – epascarello 2009-05-25 14:18:49