如何使用Ajax从php获取响应数据?

时间:2019-09-10 15:28:05

标签: php jquery ajax

我正在尝试使用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)。

有人可以告诉我我在做什么错吗?

编辑:我想指出一些我以前从未提到过的内容。我正在寻找一页解决方案。我知道只需两页就可以轻松完成,但是我想知道是否有一页解决方案。

3 个答案:

答案 0 :(得分:0)

问题是Ajax请求发送到主页,因此它接收“ 0”或“ 1”之后的所有内容。拆分。

  1. 将您的PHP代码移动到注释文件中,说“ ajax.php”
  2. 然后更改您的$.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);修剪掉除第一个字符(01以外的所有内容,并感谢{{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>

我要感谢所有帮助我解决问题的人,过去两天来一直困扰着我的问题。