私は入力としてイディオムを取り、オックスフォード辞書からその意味と例を返すシンプルなサイトを書いています。私のアイデアは次のとおりです。
次の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 Request Blocked:Same Origin Policyは http://www.oxfordlearnersdictionaries.com/search/english/direct/?q=by+far でリモートリソースの読み取りを許可しません。これは、リソースを同じドメインに移動するか、CORSを有効にすることで修正できます。
誰でもこれを解決する方法を教えてもらえますか?別のアプローチも問題ありません
あなたのウェブサイトもoxfordlearnersdictionaries.comドメインにありますか?または、ドメインへの呼び出しを試みて、同じOriginポリシーがあなたをブロックしていますか?
Oxfordlearnersdictionaries.comドメインでCORSを介してヘッダーを設定する権限がない場合は、別のアプローチを探してください。
JSONPまたは「JSON with padding」は、異なるドメインのサーバーからデータを要求するためにWebブラウザーで実行される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なしでは、サードパーティのWebサイトからデータを取得することはできません。
Php関数を使用して、file_get_contents()やCURLなどのデータを取得できます。
次に、PHP urlを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: *");
Webサイトがoxfordlearnersdictionaries.comドメインにもある場合は、以下をoxfordlearnersdictionaries.com .htaccessファイルに使用します。
ヘッダーセットAccess-Control-Allow-Origin "*"
以下のコードを.htaccessに追加します
ヘッダーセットAccess-Control-Allow-Origin *
わたしにはできる。
ありがとう
これも必要です。
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Origin: *");
メソッドを使用しましたが、CORSエラーを受け取りました。要求されていたPHPスクリプトにエラーがあったことがわかりました(2つの変数を連結するときにピリオド(。)を追加するのを忘れていました)。そのタイプミスを修正すると、うまくいきました!
そのため、呼び出されるリモートスクリプトにはエラーを含めることができないようです。
Corsが有効になっていないため、asp.net Mvc webApiで作業していたときに同じ問題が発生しました。 webApiconfigのregisterメソッド内でcorsを有効にすることでこれを解決しました
最初に here からcorsをインストールします
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
config.EnableCors();
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}