あなたの問題に対する短い答えは、はい、あなたはそれを行うことができます. ただし、クロス サイト リクエストを受け入れる方法でスクリプトを変更するには、反対側にアクセスする必要があります。ただし、多くのセキュリティ リスクを意味するため、これには細心の注意を払う必要があります。
このようにすることが可能です:
リンク:
<a href="http://mydomain.foxycart.com/cart?value=true" id="send_without_click">There is a link</a>
Javascript/JQuery コード:
$(document).ready(function () {
var a_handler = "#send_without_click";
var $a = $(a_handler);
var a_url = $a.attr('href');
$.ajax({
type: 'POST',
url: a_url,
crossDomain: true,
data: {
href: a_url
},
beforeSend: function () {
//Do something before send. If not just remove the "beforeSend" part...
},
success: function (responseData, textStatus, jqXHR) {
//the responseData is what you will get as response from the server
var value = responseData.someKey;
},
error: function (responseData, textStatus, errorThrown) {
alert('POST failed.');
}
});
});
サーバー側では、投稿リクエストを受信するページには、AJAX 呼び出しを受信できるようにするために、いくつかのヘッダーが定義されている必要があります。これにより、スクリプトでクロスドメイン POST、GET、および OPTIONS を作成できるようになります。PHP での例を次に示します。
サンプルファイルcart.php
switch ($_SERVER['HTTP_ORIGIN']) {
case 'http://from.com': case 'https://from.com':
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');
break;
}
上記はすべて次の順序に従います。
- ブラウザはOPTIONSメソッドをサーバーに送信します。これは、サーバーがクロス サイト (サーバーが許可するものは何でも) の投稿/要求を許可するかどうかを確認するためのブラウザーによる "セキュリティ" 対策です。
- 次に、サーバーは「Access-Control-Allow-Origin」で応答し、リクエストが「http://from.com」または安全な形式の「https: //from.com ".
- サーバーは問題ないので、ブラウザは要求された POST リクエストを作成します。
*注意事項
- 送信するコンテンツ タイプをクライアントに設定させることをお勧めします。そのため、それも許可する必要があります。
- サーバーは操作ごとに 2 つの要求を行います
- セキュリティへの影響が高まっています。「Access-Control-Allow-Origin: *」はちょっと危険です。
- これは、非常に古いブラウザや、おそらくモバイル ブラウザでは機能しません。
- OPTION要求だけでなく、常に上記のヘッダーを返します。
編集:
また、Web サイト (外部) がJSONP Ajaxを使用していることがわかっている場合に、データを取得する方法を見つけました。
//JSON format:
{"name":"stackoverflow","id":5}
//JSONP format:
func({"name":"stackoverflow","id":5});
example.comが JSONP のような JSON ファイルを提供していることがわかっている場合は、 example.comドメインにいない場合でも、次のようなコードを使用してファイルを取得できます。
function func(json){
alert(json.name);
}
var elm = document.createElement("script");
elm.setAttribute("type", "text/javascript");
elm.src = "http://example.com/jsonp";
document.body.appendChild(elm);