如何在使用Google Maps Geocoder时首先检查php语句 - javascript

我正在尝试制作一个允许用户向数据库添加开始和结束坐标的函数。问题是我收到一条错误消息,说未定义几何。

我做了很少的检查,但我意识到该功能甚至不检查php语句以查看$ _POST ['start']和$ _POST ['end']变量是否为空。

这是我的PHP函数,用于检查是否缺少任何字段。

$error = "";

    if (!$_POST['start']) {
        $error = "Start point is missing.";

    } else if (!$_POST['end']) {
        $error = "End point is missing.";

    } else if (!$_POST['date']) {
        $error = "Date is missing.";

    if ($error != "") {

        echo $error;
        exit();

    } else {
        $query = "INSERT INTO offer (start, end, date, startLng, startLat, endLng, endLat) VALUES ('".mysqli_real_escape_string($link, $_POST['start'])."', '".mysqli_real_escape_string($link, $_POST['end'])."', '".mysqli_real_escape_string($link, $_POST['date'])."', '".mysqli_real_escape_string($link, $_POST['startLng'])."', '".mysqli_real_escape_string($link, $_POST['startLat'])."', '".mysqli_real_escape_string($link, $_POST['endLng'])."', '".mysqli_real_escape_string($link, $_POST['endLat'])."')";

        mysqli_query($link, $query);

        echo 1;
    }

每当用户在模态中按下按钮时,它都应该启动负责获取开始和结束坐标的功能。

$("#addNewModal").click(function() {
    getStartCoordinates();
})

这是获取开始和结束坐标的功能。

function getStartCoordinates() {

    geocoder.geocode({
        'address': $("#start").val()
    },

        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){

                startLng = result[0].geometry.location.lng();
                startLat = result[0].geometry.location.lat();
                getStartCoordinates();

            } else {

                getEndCoordinates();
            }
    }             
    );
}

function getEndCoordinates() {

    geocoder.geocode({
        'address': $("#end").val()
    },

        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){

                endLng = result[0].geometry.location.lng();
                endLat = result[0].geometry.location.lat();
                addRequest();    

            } else {

                addRequest();    
            }
    }             
    );
}

和AJAX一起使用addCoordinates.php函数。

function addRequest() {


    $.ajax({
        type: "POST",
        url: "addCoordinates.php",
        data: "start=" + $("#start").val() + "&end=" + $("#end").val() + "&date=" + $("#date").val() + "&startLng=" + startLng + "&startLat=" + startLat + "&endLng=" + endLng + "&endLat=" + endLat,
        success: function(result) {

            if (result == "1") {

                $("#alertSuccess").show();

            } else {

                $("#addAlert").html(result).show();
            }

        }
    })

}

我发现了什么:

没有任何输入值输入,我得到一个错误
几何形状未定义。
如果我在开始和结束字段中都输入值,那么我最终会得到php响应,说$error = "Date is missing."
我可以通过在#addNewModal click函数中添加if语句来检查是否输入了开始/结束字段的两个值来修复该错误。

因此,主要要点是如何首先检查我的PHP响应,以便可以从我的PHP函数获得$error = "Start point is missing.";$error = "End point is missing.";响应。

参考方案

您需要先检查自己的值,然后再尝试使用Google地理编码器(这是geometry is not defined错误的出处)。对click事件进行一些简单的客户端验证可以防止出现此错误,并提供一些有关如何进行的有用提示。像这样:

$("#addNewModal").click(function() {
    if (validateInputs()) {
        getStartCoordinates();
    } else {
        alert('Please verify start location, end location, and date fields are set');
    }
});

function validateInputs() {
    return $("#start").val() && $("#end").val() && $("#date").val();
}

function getStartCoordinates() {
    geocoder.geocode({
        'address': $("#start").val()
        },
        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){
                startLng = result[0].geometry.location.lng();
                startLat = result[0].geometry.location.lat();
                // getStartCoordinates(); // This likely shouldn't be here.
            }
            getEndCoordinates();
        }
    );
}

function getEndCoordinates() {
    geocoder.geocode({
            'address': $("#end").val()
        },
        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){
                endLng = result[0].geometry.location.lng();
                endLat = result[0].geometry.location.lat();
            }

            addRequest();
        }
    );
}

一旦您能够将正确的数据从表单提交到服务器端/ PHP函数,就应该立即从服务器返回所有错误。这应该只是将错误附加在一起并提示用户。更改php函数应如下所示:

$error = "";

if (!$_POST['start']) {
    $error .= "Start point is missing. ";
}

if (!$_POST['end']) {
    $error .= "End point is missing. ";
}

if (!$_POST['date']) {
    $error .= "Date is missing. ";
}

if ($error != "") {    
    echo $error;
    exit();   
} else {
    $query = "INSERT INTO offer (start, end, date, startLng, startLat, endLng, endLat) VALUES ('".mysqli_real_escape_string($link, $_POST['start'])."', '".mysqli_real_escape_string($link, $_POST['end'])."', '".mysqli_real_escape_string($link, $_POST['date'])."', '".mysqli_real_escape_string($link, $_POST['startLng'])."', '".mysqli_real_escape_string($link, $_POST['startLat'])."', '".mysqli_real_escape_string($link, $_POST['endLng'])."', '".mysqli_real_escape_string($link, $_POST['endLat'])."')";

    mysqli_query($link, $query);

    echo 1;
}

IE中的“对象不支持属性或方法'查找'” - javascript

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="http://ajax…

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

在JavaScript函数中转义引号 - javascript

我正在尝试将变量传递给javascript函数。根据用户的选择,它可以是文本或图像。这里已经讨论了类似的问题,但我无法解决。在php中,我这样编码:if ($choice == 1) { $img = '<img src = "../folder/'.$_SESSION["img"].'�…

打印二维阵列 - javascript

我正在尝试打印子元素。在this example之后。怎么做?。$myarray = array("DO"=>array('IDEAS','BRANDS','CREATIVE','CAMPAIGNS'), "JOCKEY"=>a…

UTF-8'?'带有AJAX,PHP,HTML的符号 - javascript

所以基本上我在php中有以下代码:mysqli_query($connect,"SET NAMES 'utf8'"); mysqli_query($connect,"SET CHARACTER SET utf8"); mysqli_query($connect,"SET COLLATION…