Php 为什么“\n”被挂起到我的HTTP(AJAX)responseText?
此特定AJAX调用返回的值\n位于responseText返回的值之前 它以前没有这样做,现在当我测试if request.responseText==100的有效返回代码时,它失败了,因为它现在等于\n100 我知道我可以去掉\n,但这将是一个解决方法,我更希望找到原因并修复它 以下是我的客户端代码:Php 为什么“\n”被挂起到我的HTTP(AJAX)responseText?,php,javascript,ajax,Php,Javascript,Ajax,此特定AJAX调用返回的值\n位于responseText返回的值之前 它以前没有这样做,现在当我测试if request.responseText==100的有效返回代码时,它失败了,因为它现在等于\n100 我知道我可以去掉\n,但这将是一个解决方法,我更希望找到原因并修复它 以下是我的客户端代码: function AJAX(){ var xmlHttp; try{ xmlHttp=new XMLHttpRequest(); // Firefox, Op
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 ?>
以下是我的服务器端代码:
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 ?>
多洛金法中与收益相关的行为:
$pkg[status]=100;
return $pkg[status];
如果我替换echo$L->doLogin$pkg,那么为了确保新线不会在某个地方泄漏;回声100;它起作用了
更新2-已解决
原来问题出在一个包含在doLogin方法中的包含类文件中,该文件最近被更新为在文件顶部包含一个换行符,在开始之前我也遇到了同样的问题,通过向Ajax添加dataFilter选项发现,经过字符串化的JSON返回的消息显示,确实是PHP脚本出现了语法问题。然后,PHP服务器预先挂起了一个HTML小文档来发出错误信号。但是,当回到AJAX时,由于数据类型是“json”,所以返回的整个PHP响应首先是json解析的,因此去掉了所有的HTML前缀,只留下换行符。有效JSON返回数据前面的这些换行符导致JSON数据被认为是语法错误,就是这样!通过dataFilter选项在警报中发送原始数据,我可以看到PHP脚本的初始错误,并且一旦更正,就不会有更多的换行了 我的猜测是,在显示脚本之前,php中有一个空行。这就是服务器端文件的全部内容吗?首先确定它是客户端问题还是服务器问题-查看XHR从服务器返回的确切内容使用firebug或其他控制台来检查请求,但几乎可以肯定它将是@jcoder所说的。服务器端代码是双重回显、remove=或echoGood point@jcoder。我实际上改变了echo$的状态;要回显100,它仍然存在,但现在,我只是用替换了整个脚本,问题被删除了,所以你是对的。也许你应该把它写在答案里。request.send而不是request.sendnull的结果是什么