2016-04-13 11 views
0

AJAXは2つの異なるドメイン間で動作できないことを理解します。あるWebページから別のドメインにJSONデータを送信する必要があります。このページには、そのJSONデータをDBに記録するPHPページがあります。AJAX別のドメインにJSON文字列を送信

私が試みたのは、AJAXを使用してローカルPHPファイルと通信し、そのPHPファイルを宛先ドメインのPHPファイルに置くことでした。

私のAJAXコード:

$.ajax({ 
    url: './remote.php', 
    type: 'POST', 
    data: { 
     sentdata: data 
    }, 
    success: function(response) { 
     document.getElementById("responseMsg").innerHTML = response; 
    } 
}); 

私の地元のPHPファイルremote.php:destination.phpで

$url = "https://example.com/destination.php"; 
$data = json_encode(($_POST['sentdata'])); 
$build = array('http' => 
    array(
     'method' => 'POST', 
     'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
     'content' => $data 
    ) 
); 
$context = stream_context_create($build); 
$return = file_get_contents($url, false, $context); 
if($return) { 
    echo "success"; 
} else { 
    echo "failure"; 
} 

ドメイン上の私が持っている到達しようとしています:

$data = json_decode(file_get_contents('php://input')); 
echo $data; 

実行時に「失敗」と表示されます。 file_get_contents($ url、false、$ context);何も戻ってきていない。

別のドメインにAJAXを実行するためのこの戦略がうまくいかない理由はありますか?または私は何か間違っているのですか?

編集:私はまた、allow_url_fopenをは上のphp.iniの

+0

'= ='は入力ミスですか? '$ url = =" https://example.com/destination.php ";' – Marcus

+0

あなたは実際に別のドメインにAJAX *呼び出し*をしているわけではありません。 '。/ remote.php'はおそらく同じドメイン上で呼び出されています。他の方法で外部サーバにアクセスしているとします。 'file_get_contents()' – Marcus

+0

はい= =はタイプミスでした。私はそれを修正しました。 Marcus、私の理解は、AJAXが外部サーバーに直接電話をかけることを許可しないということです。だから、これを回避しようとしました。私はそれが技術的にAJAXの別のドメインへの呼び出しではないことを理解しています。 – Mitch

答えて

0

にあなたが別のドメインにそのJSONデータを送信するためのPHPのcURLを使用することができるように設定した検証。ローカルPHPファイルと通信するには、AJAXを使用します。このファイルの下には、レスポンスを保存して返すcURL関数があります。

ここにはPHP cURL docがあります。

+1

私はそれを調べます。ありがとうございました!しかし、上記の方法が代わりに機能しない理由はありますか? – Mitch

+0

おそらくdestination.phpには適切なアクセス許可がありません –

-1

私はあなたがCURLを使用すべきだと思う= =「https://example.com/destination.php

+0

他の答えとして、cURLは良い選択肢のようですが、今は私が表示したこの方法がうまくいかない理由が不思議です。 – Mitch

0

のURL $ URLからの何かを得ることは、私が投稿すべてが仕事をして判明しました。私の外部サーバのPHPファイルに、それが失敗する原因となっていた問題がありました。さらにトラブルシューティングを行った後、これは問題ではないことが判明しました。

他にもcURLはこれを行うための優れた解決策であると述べています。しかし、これは完璧に動作し、cURLは必要ありません。

関連する問題