Javascript 如何在使用Google Maps geocoder时首先检查php语句
我正在尝试制作一个函数,允许用户将开始和结束坐标添加到数据库中。问题是,我得到一个错误,即未定义几何体 我做了一些检查,我意识到该函数甚至没有检查php语句以查看$\u POST['start']和$\u POST['end']变量是否为空 下面是我的PHP函数,用于检查是否缺少任何字段Javascript 如何在使用Google Maps geocoder时首先检查php语句,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在尝试制作一个函数,允许用户将开始和结束坐标添加到数据库中。问题是,我得到一个错误,即未定义几何体 我做了一些检查,我意识到该函数甚至没有检查php语句以查看$\u POST['start']和$\u POST['end']变量是否为空 下面是我的PHP函数,用于检查是否缺少任何字段 $error = ""; if (!$_POST['start']) { $error = "Start point is missing."; } else if (!$_
$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();
}
}
);
}
以下是获取起点和终点坐标的函数
$("#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();
}
}
);
}
以及用于addCoordinates.php函数的AJAX
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();
}
}
})
}
我的发现:
$error=“Date丢失。”
因此,主要的问题是如何首先检查PHP响应,以便同时获得
$error=“Start point is missing.”
和$error=“缺少终点。”代码>来自我的PHP函数的响应。在尝试使用google geocoder之前,您需要检查您的值(这就是未定义几何体的地方
错误的来源)。对click事件执行一些简单的客户端验证可以防止此错误,并提供一些关于如何继续的有用提示。大概是这样的:
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();
}
}
})
}
$("#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;
}
执行此操作的典型方法是从服务器返回多个错误。这应该仅仅意味着从else if(!$\u POST['end']){
和else if(!$\u POST['date']){
中删除else,然后使用诸如:`$error.=“端点丢失了”;。然后服务器将报告$error=“起点丢失了。端点丢失了。”;它应该更好地向用户指出问题。这是个好主意。但是,它仍然无法解决我的问题。我认为这是因为它调用了getStartCoordinates()函数,而不检查是否输入了开始和结束输入,但这对我来说似乎很奇怪,因为我的PHP函数应该以$error响应。我想我对您的问题感到困惑。最后一点是,…如何首先检查我的PHP响应,以便同时获得$error=“start point is missing.”和$error=“端点丢失。”我的PHP函数的响应。
很抱歉让它不那么清楚。我想说的是getStartCoordinates()#addNewModal内的函数。即使在模式内的开始和结束输入都为空时,也会执行click函数。这会导致几何体错误未定义,因为它无法根据空输入找到坐标。因此,我试图找到解决方案,以确保$_POST['start]和$_POST['end']在执行此getStartCoordinates()函数之前,将首先在PHP脚本中检查变量。哦,我刚才在更新中提到了这一点。这将是开始和结束文本输入的客户端验证。我建议更改$(“#addNewModal”)。单击检查如果($(“#开始”).val()&$(“#结束”).val()
,我会更新我的答案。是的,这就是我要找的。谢谢。