この特定の AJAX 呼び出しは、responseText によって返される値の前に「\n」を返しています。
以前はそれを行っていませんでしたが、if (request.responseText == 100)
現在は「\n100」に等しいため、有効な戻りコードをテストすると失敗します。
「\n」を削除できることはわかっていますが、それは回避策であり、原因を見つけて修正することをお勧めします。
クライアント側のコードは次のとおりです。
function AJAX(){
var xmlHttp;
try{
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
return xmlHttp;
}
catch (e){
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
return xmlHttp;
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
}
catch (e){
alert("Your browser does not support AJAX!");
return false;
}
}
}
}
function logDetails() {
var request,
Result = document.getElementById('Result'),
message = document.getElementById('message'),
url = 'ajax/login.user.php?',
us = document.getElementById('username').value,
pa = document.getElementById('password').value;
Result.innerHTML = 'Logging in...';
if (document.getElementById) {
request = AJAX();
}
if (request) {
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
var r = request.responseText;
//var r = 100;
if (r == '100') {
Result.innerHTML = 'You are now logged in.';
window.location.href = "prebooks.php";
}
else if (r == '101' || r == '102') {
Result.innerHTML = 'Your login attempt failed.';
resetDetails();
}
else if (r == '103') {
Result.innerHTML = 'Sorry, you have no books subscription.';
}
else if (r == '999') {
Result.innerHTML = 'You have no more attempts!';
message.innerHTML = 'Please call us on (02) XXXXXXX so that we can assist you.';
} else {
alert(r);
}
}
};
}
// add my vars to url
url += "arg1="+us+"&arg2="+pa;
request.open("GET", url, true);
request.send(null);
}
これが私のサーバー側のコードです:
<?= 100 ?>
わかりました、単純化しましたが、「100」を直接エコーしようとしましたが、問題は残ります。
更新 「100」を直接エコーしても問題が解決しないと誤解されました。します。申し訳ありませんが、私を正しい方向に向けてくれてありがとう。
ただし、これにより、サーバー側で出力がどのように汚染されているかを見つけようとする必要があります。
サーバー側には、認証を処理し、エコーされる値 (100) を返すクラスがあります。これは行です:
echo $L->doLogin($pkg);
メソッドのリターンに関連する行は次のdoLogin()
とおりです。
$pkg[status]=100;
return $pkg[status];
そして、改行が機能する場合、どこかで改行が漏れていないことを確認してecho $L->doLogin($pkg);
くださいecho 100;
。
更新 2 -
解決済み doLogin() メソッド内に含まれているクラス ファイルに問題があったことが判明しました<?
。
ご意見をお寄せいただき、ありがとうございます (この情報がなければ、クライアント側のコードをいまだに手探りしていたでしょう)。