クロスドメインからログインページを作成しようとしていますが、問題を解決できませんでした。エラーは次のとおりです。
XMLHttpRequestはロードできません http://localhost/testing/resp.php 。リクエストヘッダーフィールドAccess-Control-Allow-Headersは、プリフライトレスポンスのAccess-Control-Allow-Headersでは許可されていません。
私のJavascriptコードは次のとおりです。
$('#login').click(function(){
var username = $('#uname').val();
var password = $('#pass').val();
var result = $('.result');
result.text('loading....');
if (username != '' && password !=''){
var urltopass = 'action=login&username='+username+'&password='+password;
$.ajax({
type: 'POST',
data: urltopass,
headers: {"Access-Control-Allow-Headers": "Content-Type"},
url: 'http://localhost/testing/resp.php',
crossDomain: true,
cache: false,
success: function(responseText){
console.log(responseText);
if(responseText== "0"){
result.text('incorrect login information');
} else if (responseText == "1"){
window.location="http://localhost/testing/home.php";
} else{
alert('error in sql query \n' + responseText);
}
}
});
} else return false;
});
PHP http://localhost/testing/resp.php のコード:
<?php
include "db.php"; //Connecting to database
if (!isset($_SERVER['HTTP_Origin'])) {
echo "This is not cross-domain request";
exit;
}
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
header('P3P: CP="CAO PSA OUR"'); // Makes IE to support cookies
header("Content-Type: application/json; charset=utf-8");
if (isset($_POST['action']) && $_POST['action'] == 'login'){
$uname = $_POST['username'];
$pass = $_POST['password'];
$sql = "SELECT * FROM loginajax WHERE username='$uname' AND password='$pass'";
$rs=$conn->query($sql);
if (mysqli_num_rows($rs) <= 0){
echo "0";
} else {
echo "1";
}
} else echo "this is not Login";
?>
これを削除します:
headers: {"Access-Control-Allow-Headers": "Content-Type"},
jQuery.ajax呼び出しから。
サーバーはAccess-Control-Allow-Headers
ヘッダーで応答しますが、クライアントはそれをサーバーに送信しません。
クライアントはAccess-Control-Request-Headers
を送信して特定のヘッダーの許可を要求し、サーバーはAccess-Control-Allow-Headers
で応答して、許可する実際のヘッダーをリストします。クライアントは、許可されるヘッダーを要求しません。