這個特定的AJAX調用返回由responseText返回的值前面的「\ n」。爲什麼' n'被預先寫入我的HTTP(AJAX)responseText?
它以前沒有這樣做,現在當我測試有效的返回代碼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」直接與問題依然存在。
UPDATE 我誤以爲回聲'100'沒有直接解決問題。它的確如此。對不起,感謝您指引我正確的方向。
但是,這讓我試圖找到輸出在服務器端如何被污染。
在服務器端,我有一個類來處理身份驗證並返回值(100)以進行回顯。這是該行:
echo $L->doLogin($pkg);
與在doLogin()
方法返回的線路有:
$pkg[status]=100;
return $pkg[status];
而且,以確保換行沒有在某個地方漏水,如果我更換echo $L->doLogin($pkg);
與echo 100;
它的工作。
UPDATE 2 - 解決 事實證明,這個問題是在其中包括該doLogin()方法中所包括的類文件,這最近被更新,包括在所述頂部的單個換行檔案,開幕前<?
。
非常感謝大家的意見(我還是會在沒有它的客戶端代碼中摸索)!
我的猜測是,在你顯示的腳本之前,你的php中有一個空行。這是服務器端文件的*整個*內容嗎? – jcoder 2013-03-20 10:32:52
首先確定它是客戶端還是服務器問題 - 看看XHR究竟是從服務器返回的(使用firebug還是其他控制檯來檢查請求),但幾乎肯定它是@jcoder所說的。 – kuncajs 2013-03-20 10:34:51
你的服務器端代碼是雙重回顯,刪除'='或'echo' – 2013-03-20 10:39:20