Запрос Ajax Cross-Origin заблокирован: та же политика источника запрещает чтение удаленного ресурса
Я пишу простой сайт, который принимает в качестве ввода идиому и возвращает ее значение(Ы) и пример(ы) из Оксфордского словаря. Вот моя идея:
посылаю запрос по следующему URL:
http://www.oxfordlearnersdictionaries.com/search/english/direct/?q=[idiom]
например, если идиома "не далеко", я отправлю запрос:
http://www.oxfordlearnersdictionaries.com/search/english/direct/?q=not+go+far
и я буду перенаправлен на следующую страницу:
http://www.oxfordlearnersdictionaries.com/definition/english/far_1#far_1__192
на этой странице Я могу извлечь смысл(Ы) и пример(ы) идиомы. Вот мой код для тестирование. Он будет предупреждать ответ url:
<input id="idiom" type="text" name="" value="" placeholder="Enter your idiom here">
<br>
<button id="submit" type="">Submit</button>
<script type="text/javascript">
$(document).ready(function(){
$("#submit").bind('click',function(){
var idiom=$("#idiom").val();
$.ajax({
type: "GET",
url: 'http://www.oxfordlearnersdictionaries.com/search/english/direct/',
data:{q:idiom},
async:true,
crossDomain:true,
success: function(data, status, xhr) {
alert(xhr.getResponseHeader('Location'));
}
});
});
});
</script>
проблема в том, что у меня есть ошибка:
запрос Cross-Origin заблокирован: та же политика Origin запрещает чтение удаленного ресурса в http://www.oxfordlearnersdictionaries.com/search/english/direct/?q=by+далеко. Это можно исправить, переместив ресурс в тот же домен или включив CORS.
может кто-нибудь сказать мне, как решить это, пожалуйста? Другой подход хорош слишком!--5-->
5 ответов
ваш вебсайт также на oxfordlearnersdictionaries.com домен? или вы пытаетесь позвонить в домен, и та же политика происхождения блокирует вас?
Если у вас нет разрешения установить заголовок через CORS на oxfordlearnersdictionaries.com домен вы можете искать другой подход.
JSONP или "JSON с заполнением" -это техника связи, используемая в программах JavaScript, запущенных в веб-браузерах, для запроса данных с сервера в другом домене, что запрещено типичными веб-браузерами из-за политики того же происхождения. JSONP использует тот факт, что браузеры не применяют политику одного и того же источника к тегам сценариев. Обратите внимание, что для работы JSONP сервер должен знать, как отвечать с результатами в формате JSONP. JSONP не работает с JSON-форматированием результаты.
http://en.wikipedia.org/wiki/JSONP
хороший ответ на stackoverflow:jQuery AJAX кросс-домен
$.ajax({
type: "GET",
url: 'http://www.oxfordlearnersdictionaries.com/search/english/direct/',
data:{q:idiom},
async:true,
dataType : 'jsonp', //you may use jsonp for cross origin request
crossDomain:true,
success: function(data, status, xhr) {
alert(xhr.getResponseHeader('Location'));
}
});
мы не можем получить данные с веб-сайта третьей стороны без jsonp.
вы можете использовать функцию php для извлечения данных, таких как file_get_contents() или CURL и т. д.
затем вы можете использовать url PHP с вашим кодом ajax.
<input id="idiom" type="text" name="" value="" placeholder="Enter your idiom here">
<br>
<button id="submit" type="">Submit</button>
<script type="text/javascript">
$(document).ready(function(){
$("#submit").bind('click',function(){
var idiom=$("#idiom").val();
$.ajax({
type: "GET",
url: 'get_data.php',
data:{q:idiom},
async:true,
crossDomain:true,
success: function(data, status, xhr) {
alert(xhr.getResponseHeader('Location'));
}
});
});
});
</script>
создать файл PHP = get_data.в PHP
<?php
echo file_get_contents("http://www.oxfordlearnersdictionaries.com/search/english/direct/");
?>
поместите ниже строки в верхней части файла, который вы вызываете через AJAX.
header("Access-Control-Allow-Origin: *");
добавьте код ниже к вашему.реврайт
набор заголовков Access-Control-Allow-Origin *
Это работает для меня.
спасибо