Вызвать URL из javascript
Есть ли способ вызвать URL-адрес и получить ответ с помощью javascript?
Мне нужен эквивалент ASP.NET:
WebRequest req = HttpWebRequest.Create("http://someurl.com");
WebResponse webResponse = req.GetResponse();
У меня есть внешний url, который содержит некоторую информацию, которая мне нужна, и я хочу называть этот url из javascript и анализировать ответ, чтобы определить, что делать в моем приложении.
Ответы
Ответ 1
Вы можете сделать запрос AJAX, если URL-адрес находится в том же домене, например, в одном и том же другом приложении. Если это так, я бы, вероятно, использовал фреймворк вроде jQuery, скорее всего, метод get.
$.get('http://someurl.com',function(data,status) {
...parse the data...
},'html');
Если вы сталкиваетесь с проблемами с перекрестными доменами, то лучше всего создать серверное действие, которое проксирует запрос для вас. Сделайте свой запрос на свой сервер с помощью AJAX, запросите сервер и верните ответ с внешнего хоста.
Благодаря @nickf, для указания очевидной проблемы с моим оригинальным решением, если URL-адрес находится в другом домене.
Ответ 2
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);
Ответ 3
Да, то, что вы просите, называется AJAX или XMLHttpRequest. Вы можете использовать библиотеку jQuery, чтобы упростить вызов (из-за проблем с совместимостью между браузерами) или написать собственный обработчик.
В jQuery:
$.GET('url.asp', {data: 'here'}, function(data){ /* what to do with the data returned */ })
В plain 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");
}
}
}
Ответ 4
Если вам нужно проверять внешние страницы, вы не сможете избавиться от чистого 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 и т.д.), то использование библиотеки, такой как cURL на стороне сервера script, может получить эту информацию, а затем передать ее в ваше приложение javascript.
Думая об этом сейчас, возможно, для вас могут быть прокси-серверы с поддержкой JSONP, если опция "настройка моего собственного прокси" не будет жизнеспособной.