Javascript Ajax代码不起作用

Javascript Ajax代码不起作用,javascript,php,ajax,Javascript,Php,Ajax,所以我有一个程序,用户在其中输入一个城市和一个国家。程序在数据库中查找城市是否已经存在,如果存在,我将使用ajax显示警告消息,如果不存在,我将城市添加到数据库中 表格如下: <form action="addCity.php" method="get" onsubmit="return validateCityInfoForm();"> 如果城市已经存在于数据库中,则checkIfCityExists.php回显“true”,否则回显“false” 问题是它总是在db中添加城市,

所以我有一个程序,用户在其中输入一个城市和一个国家。程序在数据库中查找城市是否已经存在,如果存在,我将使用ajax显示警告消息,如果不存在,我将城市添加到数据库中

表格如下:

<form action="addCity.php" method="get" onsubmit="return validateCityInfoForm();">
如果城市已经存在于数据库中,则checkIfCityExists.php回显“true”,否则回显“false”

问题是它总是在db中添加城市,即使城市已经存在。 php返回“true”,但这似乎无关紧要

我真的不知道是什么问题,任何帮助都将不胜感激。 谢谢

下面是checkIfCityExists.php:

<?php
include ('database_connection.php');
$city = mysqli_real_escape_string($dbc, $_GET['city']);
$country = mysqli_real_escape_string($dbc, $_GET['country']);

//check if the city and country already exists in the database
$query_verify = "SELECT * FROM city WHERE name = '$city' AND country = '$country'";
$result_verify = mysqli_query($dbc, $query_verify);

if(mysqli_num_rows($result_verify) == 0) { //if the city does not appear in the database
    echo "false";
}
else {
    echo "true";
}

?>

问题是,您的onsubmit没有返回。

因此
validateCityInfoForm()
返回未定义,这不会阻止浏览器执行操作
validateCityInfoForm()
返回false
,以防止浏览器提交表单。然后在
onreadystatechange
调用
表单。如果需要,提交()

您正在尝试进行异步调用以进行验证。当电话回电时已经太迟了,因为表单已经提交了

Ajax调用不会暂停代码的执行,而是进行调用,然后执行其余的代码


您需要做的是将其分为两个步骤,进行Ajax调用,当onreadystatechange返回时,提交表单

我认为问题出在PHP文件中。有了这段代码,您只需要得到请求的结果,而不需要对DB做任何事情。您的JS看起来很好,添加到数据库是在PHP中完成的,因此问题可能出在代码的某个地方。将代码张贴在处理数据库的地方欢迎来到异步调用的世界。当您直接在浏览器中打开
checkIfCityExists.PHP?city=…
URL时,会返回什么?问题似乎出在您的PHP中。如果Async设置为false而不是true@YatinTrivedi我知道这是一个坏习惯。
<?php
include ('database_connection.php');
$city = mysqli_real_escape_string($dbc, $_GET['city']);
$country = mysqli_real_escape_string($dbc, $_GET['country']);

//check if the city and country already exists in the database
$query_verify = "SELECT * FROM city WHERE name = '$city' AND country = '$country'";
$result_verify = mysqli_query($dbc, $query_verify);

if(mysqli_num_rows($result_verify) == 0) { //if the city does not appear in the database
    echo "false";
}
else {
    echo "true";
}

?>