我正在尝试制作一个允许用户向数据库添加开始和结束坐标的函数。问题是我收到一条错误消息,说未定义几何。
我做了很少的检查,但我意识到该功能甚至不检查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…