将jQuery ajax转换为普通JavaScript时出现问题

将jQuery ajax转换为普通JavaScript时出现问题,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我正在研究将jQueryAjax请求转换为普通JavaScript,这样我就知道如何实现这两种方式。我试图做的是将一个JSON对象从我的PHP脚本传递到我的JavaScript文件中,并在页面上显示JSON对象的值 我刚刚开始深入研究AJAX,我已经让jQuery版本能够很容易地独立工作,但是我很难使用普通JavaScript版本。对于纯JavaScript部分,我将随附一本JavaScript书籍。这就是代码结构看起来可能不同的原因 另外,我知道没有真正的安全实现,这很好。这只是为了我自己的学

我正在研究将jQueryAjax请求转换为普通JavaScript,这样我就知道如何实现这两种方式。我试图做的是将一个JSON对象从我的PHP脚本传递到我的JavaScript文件中,并在页面上显示JSON对象的值

我刚刚开始深入研究AJAX,我已经让jQuery版本能够很容易地独立工作,但是我很难使用普通JavaScript版本。对于纯JavaScript部分,我将随附一本JavaScript书籍。这就是代码结构看起来可能不同的原因

另外,我知道没有真正的安全实现,这很好。这只是为了我自己的学习目的

以下是HTML:

<body>
    <h3>Grab the location of a person in the database below</h3>
    <form action="ajax/name.php" method="POST" name="ajaxForm" id="ajaxForm">
        <label for="name">Name: </label>
        <input type="text" id="name" name="name">
        <input type="submit" id="name-submit" name="name-submit" value="Grab">
    </form>

    <div id="results">
        <label for="location">Location: </label>
        <input type="text" name="name-data" id="name-data" disabled>
    </div>

    <div id="insert">
        <h3>Insert a new person with a new location below</h3>
        <form action="ajax/name.php" method="POST" name="insForm" id="insForm">
            <label for="name">Name: </label>
                <input type="text" name="ins-name" id="ins-name">
            <label for="location">Location: </label>
                <input type="text" name="ins-location" id="ins-location">
                <input type="submit" id="ins-submit" name="ins-submit" value="Insert">
        </form>
        <div id="insresults_name"></div>
        <div id="insresults_loc"></div>
    </div>

    <script src="js/ajax.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="js/global.js"></script>
</body>
以下是我的PHP脚本:

<?php

if (isset($_POST['name'])) {
    require '../db/connect.php';
    $conn = new Con();
    $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
    $stmt = $conn->prepare('SELECT * FROM names WHERE name=:name');
    $stmt->bindParam(':name', $name);
    $stmt->execute();
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

    echo (isset($result['location'])) ? $result['location'] : 'That name isn\'t listed';
}

if (isset($_POST['ins-name']) && isset($_POST['ins-location'])) {
    require '../db/connect.php';
    $conn = new Con();
    $name = filter_input(INPUT_POST, 'ins-name', FILTER_SANITIZE_STRING);
    $loc = filter_input(INPUT_POST, 'ins-location', FILTER_SANITIZE_STRING);

    $stmt = $conn->prepare('INSERT INTO names (name, location) VALUES (:name, :loc)');
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':loc', $loc);

    try {
        $stmt->execute();
        $result = $stmt->rowCount();
        if ($result) {
            $stmt = $conn->prepare('SELECT * FROM names WHERE name=:name');
            $stmt->bindParam(':name', $name);
            $stmt->execute();

            $res = $stmt->fetch(PDO::FETCH_ASSOC);
            $val = array();
            $val[0] = $res['name'];
            $val[1] = $res['location'];

            echo json_encode($val);
        } else {
            echo 'Fail';
        }
    } catch (Exception $e) {
        echo 'Error: ' . $e->getMessage() . '';
    }

}

?>
下面是我提出的简单JavaScript,但不起作用:

function getData() {
    'use strict';
    var name = document.getElementById('ins-name').value();
    var location = document.getElementById('ins-location').value();
    var url = document.getElementById('ins-name').getAttribute('action');
    if ((name.length > 0) && (location.length > 0)) {
        var ajax = getXMLHttpRequestObject();
        ajax.ononreadystatechange = function () {
            if (ajax.readyState == 4) {
                // Check the status code:
                if ((ajax.status >= 200 && ajax.status < 300) || (ajax.status == 304)) {
                    // if ajax.responseText isn't empty
                    if (ajax.responseText) {
                        var arr = Array();
                        arr = JSON.parse(responseText);
                        document.getElementById('insresults_name').innerHTML('Name: ' + arr[0]);
                        document.getElementById('insresults_loc').innerHTML('Location: ' + arr[1]);
                    } else {
                        alert('Something went wrong!');
                    }
                } else {
                    alert('Bad Status Code!');
                }
            }
        };
        ajax.open('POST', '../ajax/name.php', true);
        ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        var data = 'name=' + encodeURIComponent(name) + 'location=' + encodeURIComponent(location);
        ajax.send(data);
        return false;
    } else {
        alert('Please complete the form!');
    }
}

function init() {
    'use strict';
    if (document && document.getElementById) {
        var form = document.getElementById('insForm');
        form.onsubmit = getData;
    }
}
window.onload(init);

此处输入错误:ajax.onreadystatechange应该是ajax.onreadystatechange。即使更改了它,它仍然会将我发送到操作页面。我想做的是让结果显示在表单下面的两个div中。如果它正在更改页面,那么您可能需要从onsubmit处理程序中防止默认表单操作的默认值。这就是我将返回值设置为false的原因;您是否看到任何脚本错误?您已经设置了断点或插入了console.log语句,以查看通过getData的流发生了什么。你知道请求是否到达你的服务器吗?基本上,您已经采取了基本的调试和故障排除步骤。如果有,请把你看到的贴出来。如果你没有,那么当事情不顺利的时候,这应该是第一步。
function getData() {
    'use strict';
    var name = document.getElementById('ins-name').value();
    var location = document.getElementById('ins-location').value();
    var url = document.getElementById('ins-name').getAttribute('action');
    if ((name.length > 0) && (location.length > 0)) {
        var ajax = getXMLHttpRequestObject();
        ajax.ononreadystatechange = function () {
            if (ajax.readyState == 4) {
                // Check the status code:
                if ((ajax.status >= 200 && ajax.status < 300) || (ajax.status == 304)) {
                    // if ajax.responseText isn't empty
                    if (ajax.responseText) {
                        var arr = Array();
                        arr = JSON.parse(responseText);
                        document.getElementById('insresults_name').innerHTML('Name: ' + arr[0]);
                        document.getElementById('insresults_loc').innerHTML('Location: ' + arr[1]);
                    } else {
                        alert('Something went wrong!');
                    }
                } else {
                    alert('Bad Status Code!');
                }
            }
        };
        ajax.open('POST', '../ajax/name.php', true);
        ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        var data = 'name=' + encodeURIComponent(name) + 'location=' + encodeURIComponent(location);
        ajax.send(data);
        return false;
    } else {
        alert('Please complete the form!');
    }
}

function init() {
    'use strict';
    if (document && document.getElementById) {
        var form = document.getElementById('insForm');
        form.onsubmit = getData;
    }
}
window.onload(init);