CORS経由でwww.siteone.comからwww.sitetwo.comにフォームデータを投稿しようとしています。私のajaxコードはこれです:
<script>
$(document).ready(function(){
$("#submit").live('click',function() {
var url = "http://www.sitetwo.com/cors.php";
var data = $('#form').serialize();
jQuery.ajax({
url : url,
type: "POST",
data : $('#form').serialize(),
}).done(function(response){
alert(response);
}).fail(function(error){
console.log(error.statusText);
});
return false;
});
});
</script>
www.sitetwo.com
のcors.phpファイルは次のとおりです。
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
echo "hai";
?>
ただし、引き続きAccess-control-Allow-Originエラーがスローされます。スローされるエラーは次のとおりです。
XMLHttpRequest cannot load http://www.sitetwo.com/cors.php. Origin http://www.siteone.com is not allowed by Access-Control-Allow-Origin.
ヘッダーを介してリモートWebサイトを許可するだけでCORSを使用すると、クロスドメインリクエストを使用できることがわかりました。しかし、このようにしようとすると、エラーがスローされます。ここで何かを見逃していませんか?私のリクエスト/レスポンスヘッダーは次のとおりです。
Response Headers
Connection Keep-Alive
Content-Length 487
Content-Type text/html; charset=iso-8859-1
Date Fri, 23 Aug 2013 05:53:20 GMT
Keep-Alive timeout=15, max=99
Server Apache/2.2.15 (CentOS)
WWW-Authenticate Basic realm="Site two Server - Restricted Area"
Request Headers
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length 43
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Host www.sitetwo.com
Origin http://www.siteone.com
Referer http://www.siteone.com/index.html
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0
最後に、私自身が質問で説明した問題を解決しました。ヘッダーにアクセスするために実装したコードが正しくありません。
以下に示す2行のコードは、与えられたときに機能しませんでした。
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
?>
しかし、CORSリクエストを適切に処理することは少し複雑です。以下は、より完全に応答する関数です。更新されたコードは次のとおりです。
<?php
// Allow from any Origin
if (isset($_SERVER['HTTP_Origin'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_Origin']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
echo "You have CORS!";
?>
私は別のものから見つけました post それは働いた....
もう1つの理由は、セミコロンまたはPHPのどこかが欠落している場合、エラー報告がオンになっている場合でも、CORSエラーメッセージがajaxによって表示される唯一のエラーになりますが、実際のエラーはブラウザのphp URL。