我正在尝试使用Ajax获取php响应数据。我想检查我的输入中testing.txt
中是否有特定的字符串,如果找到了该字符串,则php应该echo "1"
,但是无论我尝试什么,AJAX总是说the output isn't 1
这是我的代码:
<?php
if (isset($_POST['table'])) {
$file = file("testing.txt");
if (in_array($_POST['table'], $file)) {
echo "1";
} else {
echo "0";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<input type="text" name="text" id="text">
<button id="button">NEXT</button>
<script type="text/javascript" src="jquery.js"></script>
<script>
var text;
document.getElementById('button').onclick = function () {
text = document.getElementById('text').value;
post(text);
};
function post(vally) {
var table = vally;
$.post('test.php', {table:table}, function(data) {
})
.done(function (data) {
if (data == 1) {
console.log("the output is 1")
} else {
console.log("the output isn't 1")
}
});
console.log('posted');
}
</script>
</body>
</html>
testing.txt:
abc
def
ghi
如果我console.log(data)
,我得到的答复:
0<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<input type="text" name="text" id="text">
<button id="button">NEXT</button>
<script type="text/javascript" src="jquery.js"></script>
<script>
var text;
document.getElementById('button').onclick = function () {
text = document.getElementById('text').value;
post(text);
};
function post(vally) {
var table = vally;
$.post('test.php', {table:table}, function(data) {
})
.done(function (data) {
if (data == 1) {
console.log("the output is 1")
} else {
console.log(data)
}
});
console.log('posted');
}
</script>
</body>
</html>
我尝试使用.done()、. fail()和.always(),但我总是得到the output isn't 1
(我正在使用JQuery 3.2.1)。
有人可以告诉我我在做什么错吗?
编辑:我想指出一些我以前从未提到过的内容。我正在寻找一页解决方案。我知道只需两页就可以轻松完成,但是我想知道是否有一页解决方案。
答案 0 :(得分:0)
问题是Ajax请求发送到主页,因此它接收“ 0”或“ 1”之后的所有内容。拆分。
$.post()
设置以调用ajax.php
而不是test.php
。 因此Ajax请求将只接收'0'或'1'字符串。
答案 1 :(得分:0)
请注意,您的AJAX响应是整个页面,以您要查找的一位数字开头。您无需将整个页面两次发送到浏览器。将您的PHP逻辑仅移动到它自己的文件中。为了演示起见,我们将其称为checkTable.php
:
<?php
if (isset($_POST['table'])) {
$file = file("testing.txt");
if (in_array($_POST['table'], $file)) {
echo "1";
} else {
echo "0";
}
}
?>
然后在该页面上拨打AJAX:
$.post('checkTable.php', {table:table})
然后,响应将仅包含 PHP代码返回的内容,而不是整个页面。 (值得注意的是,如果table
不在POST数据中,则此PHP代码将返回空响应。)
除此之外,您的代码当前针对所提供的任何输入返回一个0
,因此“输出不是1”仍然是正确的。为此,您需要仔细检查您的输入和数据以确认您的假设。
答案 2 :(得分:-1)
因为我希望将所有内容都保存在一个文件中,所以我决定使用data.slice(0, 1);
修剪掉除第一个字符(0
或1
以外的所有内容,并感谢{{3} }提醒我可能存在空白问题。现在,我添加了text.trim()
来从输入中删除所有空白,并且array_filter(array_map('trim', $file));
来从文件中写入的字符串中删除所有空白。
这是完成的代码:
<?php
if (isset($_POST['table'])) {
$file = file("testing.txt");
$file = array_filter(array_map('trim', $file));
if (in_array($_POST['table'], $file) == true) {
echo "1";
} else {
echo "0";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<input type="text" name="text" id="text">
<button id="button">NEXT</button>
<script type="text/javascript" src="jquery.js"></script>
<script>
var text;
document.getElementById('button').onclick = function () {
text = document.getElementById('text').value;
post(text.trim());
};
function post(vally) {
var table = vally;
console.log(vally);
$.post('test.php', {table:table}, function(data) {
var cut = data.slice(0, 1);
if (cut == 1) {
console.log("the output is 1")
} else {
console.log(cut);
}
});
console.log('posted');
}
</script>
</body>
</html>
我要感谢所有帮助我解决问题的人,过去两天来一直困扰着我的问题。