У меня есть всплывающая форма для регистрации на моем сайте. И я хочу убедиться, что электронная почта еще не используется до отправки. Я использую «при отправке» внутри формы для вызова validateForm. Вызов validateForm работает. Это даже работает, когда у меня нет вызова Ajax в функции. Однако, когда я добавляю свой вызов Ajax, Ajax продолжает не работать. Это идет прямо к ошибке: и я получаю Object Object. Что не так с моей порцией Ajax, которая помешала бы его работе? Может ли быть какая-то настройка на моем хосте?
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> </script>
<script type="text/javascript">
function validateForm()
{
var email = document.forms["signupform"]["email"].value;
if (email == "")
{
return false;
}
else
{
$.ajax({
type: "POST",
url: "/CheckEmail2.php",
data: {User_Email:email},
dataType: "text",
success: function(resp)
{
if (respects == "Found")
{
return false;
}
else
{
return true;
}
},
error: function(data){
alert(data);
}
}); //end Ajax
}
}
</script>
вы получаете данные в формате JSON, поэтому вам нужно проверить console.log вместо alert, alert()
не будет работать, и ваш AJAX работает.
console.log(data);
используйте f12, чтобы открыть инструменты разработчика в ваших браузерах, а затем вы можете проверить в нем вкладку консоли.
Не ясно, какой тип данных возвращается. Вы указываете text
в вашем коде еще, если это json
, это изменит вещи.
Пожалуйста, проверьте с помощью следующего кода:
function validateForm(){
var email = document.forms["signupform"]["email"].value;
var result = false;
if (email != ""){
$.ajax({
type: "POST",
url: "/CheckEmail2.php",
data: { "User_Email": email },
dataType: "text",
success: function(resp){
console.log(resp);
if (resp != "Found"){
result = true;
}
},
error: function(data, status){
console.log(data, status);
}
}); //end Ajax
}
return result;
}
Когда вы тестируете, вы должны увидеть результаты в консоли. Также не ясно, как вы планируете использовать свою функцию, но я предполагаю, что она должна вернуться true
или же false
, так что это должно быть сделано за пределами $.ajax()
вызов.
Я не уверен, но я бы предположил, что вы хотели бы вернуться true
если Found
возвращается, но это не та логика, которую вы используете. Так что подумайте, как вы хотите, чтобы это работало.
Обновить
Я бы посоветовал следующее в вашем PHP:
<?php
$search = array(
"term" => "",
"found" => false,
"results" => "");
if(isset($_POST['User_Email'])){
$search['term'] = $_POST['User_Email'];
if(strpos($_POST['User_Email'], "@")){
$search['found'] = true;
$search['results'] = $_POST['User_Email'];
}
}
header("Content-type:application/json");
echo json_encode($search);
?>
Это гарантирует, что вы возвращаете данные JSON, и вам будет проще обратиться к нему в коде AJAX. Сделайте несколько изменений примерно так:
function validateForm(){
var email = document.forms["signupform"]["email"].value;
var result = false;
if (email != ""){
$.ajax({
type: "POST",
url: "/CheckEmail2.php",
data: { "User_Email": email },
dataType: "json",
success: function(resp){
console.log(resp);
if(resp.found){
result = true;
}
},
error: function(data, status){
console.log(data, status);
}
}); //end Ajax
}
return result;
}
Надеюсь, это поможет.
вы получаете объект json, измените тип данных на «json», а затем выполните итерацию по …
что-то вроде следующего
$.ajax({
type: "POST",
contentType: 'application/json',
url: "/CheckEmail2.php",
data: {User_Email:email},
dataType: "json",
success: function(data){
if(data.results.length > 0) {
for(i in data.results){
var eachItem = data.results[i];
var xxx = eachItem.xxx; // example
console.log(xxx);
.....
...