2012-01-30 2 views
1

Я пытаюсь загрузить удаленный URL (или, скорее, просто проверить, существует ли удаленная страница).Использование .ajax() для загрузки удаленного URL-адреса - не работает

Это работает просто отлично:

$(function() {  
    $.ajax({ 
     url:'localtest.html', 
     type: 'html', 
     success: function(content,code) { 
      alert(code); 
      $('body').html(content); 
     } 
    });   
}); 

Но своп в удаленном URL, и я ничего не получаю:

$(function() {  
    $.ajax({ 
     url:'http://www.google.com/', 
     type: 'html', 
     success: function(content,code) { 
      alert(code); 
      $('body').html(content); 
     } 
    });   
}); 

Есть ли способ сделать это?

+0

Какая ошибка вы получаете. Вы использовали Firebug, чтобы узнать, что такое ошибка? – Steve

ответ

3

AJAX не поддерживает перекрестные доменные звонки по соображениям безопасности.

Традиционный путь вокруг него с помощью jsonp

2

браузеров предотвратить Ajax доступа к ресурсам междоменных (СОП = Same Origin Policy). Он будет работать, только если сервер настроен для «Access-Control-Allow-Origin», указывающего на ваш домен (или * или аналогичный).

+0

Access-Control-Allow-Origin не будет работать со старыми браузерами (например, IE), поэтому его нельзя считать надежным. –

2

Это связано с тем, что браузер не разрешает межсайтовые запросы, если удаленный сервер явно не разрешает его, отправив заголовок Access-Control-Allow-Origin. Если вы просто хотите проверить существование, вы можете загрузить URL-адрес в теге изображения с помощью события onload и onerror. Однако вы не сможете получить доступ к содержимому удаленного URL; это для безопасности. В противном случае, например, вы могли бы загрузить facebook и прочитать чью-то стену, не зная.

-1

Это неправильный вызов ajax. Тип должен быть «GET», если вы выполняете операцию поиска. То, что должно быть «html», является атрибутом dataType.

$.ajax({ 
     url:'http://www.google.com/', 
     type: 'GET' 
     dataType: 'html', 
     success:function(content,code) 
     { 
      alert(code); 
      $('body').html(content); 
     } 
     });   
    }); 

а также, как кто-нибудь добавил, так как вы делаете вызов google.com, вы должны предоставить JSONP обратный вызов, из-за того же происхождения policy..hope, что помогает.

+0

Может у вас есть пример, касающийся обратного вызова JSONP. Поделись, пожалуйста . –

-2

Использовать атрибут в вызове AJAX.

crossDomain: true 

И удостоверьтесь, что метатег данных html-страницы, где вы загружаете содержимое.

+0

Это ничего не сделает. Это имеет значение только в том случае, если вы делаете один и тот же запрос происхождения, который может быть * перенаправлен * на другое происхождение (поскольку он сообщает jQuery не добавлять дополнительные заголовки к запросу, для которого требуется запрос предварительной проверки OPTIONS для получения разрешений для CORS, который он добавляет, если указанный URL указывает на то же происхождение). Вам все еще нужен сервер, на который делается запрос, чтобы разрешить CORS. – Quentin

+0

Согласитесь с этим, я использую этот сценарий в приложении cordova, где я могу вызвать удаленный url в своем приложении, разрешив разрешения CROS. и он отлично работает. – user2417120

-1

Из-за соображений безопасности AJAX не поддерживает CORS (совместное использование ресурсов скрещиванием).

+0

Да, да. CORS был разработан специально для Ajax (а затем расширен для нескольких других вещей, таких как шрифты и изображения холста). – Quentin

Смежные вопросы