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