gpt4 book ai didi

php - 为什么 '\n' 被添加到我的 HTTP (AJAX) 响应文本前面?

转载 作者:行者123 更新时间:2023-11-28 09:17:02 25 4
gpt4 key购买 nike

这个特定的 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() 方法中包含的类文件中,该方法最近已更新为在文件顶部、打开 <? 之前包含一个换行符。 .

非常感谢大家的意见(如果没有它,我仍然会在客户端代码中摸索)!

最佳答案

我遇到了同样的问题,并发现(通过向 Ajax 添加 dataFilter 选项,并发出警报显示返回的字符串化 JSON),这实际上是 PHP 脚本存在语法问题。然后,PHP 服务器会预先添加一个 HTML 迷你文档来发出错误信号。但是,当回到 AJAX 时,由于 dataType 为“json”,整个返回的 PHP 响应首先被解析为 json,从而剥离了所有前置的 HTML,只留下换行符。有效 JSON 返回数据前面的这些换行符导致 JSON 数据被视为语法错误,就是这样!通过 dataFilter 选项在警报中发送原始数据,我能够看到 PHP 脚本初始错误,并且一旦更正,就不再预先添加换行符!

关于php - 为什么 '\n' 被添加到我的 HTTP (AJAX) 响应文本前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15520979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com