这是问题所在。我有一个ajax函数,只是检查用户输入的电子邮件是否已被使用。
它使用的php脚本根据结果发回“true”或“false”字符串。当我收到响应文本或者下面函数中的“data”变量时,看看它的==是否为“true”,它永远不会通过并且总是计算为false。
这很奇怪,因为当我打开数据变量时 它应该显示为“true”,但它只是没有显示 在if语句中等于“true”。不知道发生了什么 这里。
AJAX功能:
function check_email() {
var email = document.sign_up_form.email_first.value;
document.getElementById("email1").innerHTML = ' <img src="loading.gif" width="15">';
$.ajax({
type: "GET",
url: "java_check_email.php",
data: "email="+email,
success: function(data){
if(data == "true"){
document.getElementById("email1").innerHTML = ' <img src="check.png" width="15">';
document.getElementById("email4").innerHTML = '';
}
else {
document.getElementById("email1").innerHTML = ' <img src="xmark.png" width="15">';
document.getElementById("email4").innerHTML = 'Email is already in use<br>';
}
}
});
}
更新:
PHP脚本看起来像这样
<?php
include('functions.php');
$email = $_GET['email'];
$query_check = "removed for obvious reasons...";
$result_check = mysql_query($query_check);
if(mysql_num_rows($result_check) == 0){
echo 'true';
}
else{
echo 'false';
}
?>
此外,在收到ajax响应后调用console.log(data)后,我在js控制台中获得了值“true”.....
答案 0 :(得分:1)
要进行调试,请尝试
if (data.replace(/\s+/g, '') == "true") {
...我的钱在<?php ?>
标签之外的空白处。请注意,如果这解决了问题,则不应考虑解决方案 - 真正的解决方案是从PHP脚本中删除其他空格。
开头<
标记的<?php
应该是文件中的第一个字符。例如:
This empty line will be output directly <?php ^^^^ This whitespace will be output directly
另请注意,关闭?>
标记通常是不必要的(因为在这种情况下似乎是这样)并且完全省略它可以帮助避免这样的问题。
如果你想将一个布尔值返回给JS,你应该简单地回显1
或0
,这样你就可以在接收Javascript中执行此操作:
if (data) {
答案 1 :(得分:0)
我知道这已经过时了,但是我遇到了完全相同的问题并且无法解决问题。我确定它不是白色空间问题,但我能够以不同的方式解决它。 也许它不是最好的方式(我仍然想知道为什么它不能以通常的方式工作),但我做的是回显0(假)和1(真实)
然后我将数据解析为Integer,所以我的代码如下所示:
function(data){
var result = parseInt(data);
if (result === 1){
$('#loginresult').html('OK');
} else {
$('#loginresult').html('NOT OK');
}
我希望我可以通过这种解决方法帮助任何人(但是一个好的解决方案会更好)