Междоменные запросы с помощью jQuery - PullRequest
6 голосов
/ 03 октября 2011

Для проекта мне нужно получить исходный код веб-страницы других доменов.Я пробовал следующий код:

$('#container').load('http://google.com');

$.ajax({
    url: 'http://news.bbc.co.uk',
    type: 'GET',
    success: function(res) {
        var headline = $(res.responseText).find('a.tsh').text();
        alert(headline);
    }
});

Тем не менее я не получаю никаких результатов, а просто пустое окно с предупреждением.

Ответы [ 6 ]

11 голосов
/ 03 октября 2011

По умолчанию все браузеры ограничивают междоменные запросы, вы можете обойти это, используя YQL в качестве прокси.Смотрите руководство здесь: http://ajaxian.com/archives/using-yql-as-a-proxy-for-cross-domain-ajax

4 голосов
/ 18 октября 2011

Этот код отлично работает с помощью JQuery и YQL

$(document).ready(function(){
  var container = $('#target');
  $('.ajaxtrigger').click(function(){
    doAjax($(this).attr('href'));
    return false;
  });
  function doAjax(url){
    if(url.match('^http')){
      $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
                "q=select%20*%20from%20html%20where%20url%3D%22"+
                encodeURIComponent("http://www.yahoo.com")+
                "%22&format=xml'&callback=?",
        function(data){
          if(data.results[0]){
            var data = filterData(data.results[0]);
            container.html(data);

          } else {
            var errormsg = '<p>Error: could not load the page.</p>';
            container.html(errormsg);
          }
        }
      );
    } else {
      $('#target').load(url);
    }
  }
  function filterData(data){
    data = data.replace(/<?\/body[^>]*>/g,'');
    data = data.replace(/[\r|\n]+/g,'');
    data = data.replace(/<--[\S\s]*?-->/g,'');
    data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
    data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
    data = data.replace(/<script.*\/>/,'');
    return data;
  }
});
4 голосов
/ 03 октября 2011

Из соображений безопасности скрипты не могут получить доступ к контенту из других доменов.У Mozilla есть длинная статья о контроле доступа HTTP , но суть в том, что без добавления самим сайтом поддержки междоменных запросов вы облажались.

1 голос
/ 18 июля 2012

Решением для вашего случая является JSON с отступом или JSONP.

Вам понадобится HTML-элемент, в котором для его атрибута src указан URL-адрес, который возвращает JSON следующим образом:

<script type="text/javascript" src="http://differentDomain.com/RetrieveUser?UserId=1234">

Вы можете найти в Интернете более подробную информацию.Глубокое объяснение, но JSONP - определенно ваше решение для этого.

0 голосов
/ 29 октября 2012

Выполните следующие шаги. 1: Добавить тип данных: jsonp к сценарию. 2: добавить параметр "обратного вызова" в URL 3: Создайте функцию JavaScript с именем, совпадающим со значением параметра «обратный вызов». 4: Выходные данные могут быть получены внутри функции JavaScript.

0 голосов
/ 13 января 2012

Найдено еще одно решение для этого:

function getData(url){
   if(url.match('^http')){
     $.get(url,
      function(data){
        process(data);
      }//end function(data)
     );//end get
   } 
}

Это действительно довольно простой способ обработки междоменных запросов.Так как некоторые сайты, такие как www.imdb.com, отклоняют запросы YQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...