Ответ всегда целый ajax -пакет - PullRequest
0 голосов
/ 05 февраля 2020

Я всегда получаю весь ajax -пакет вместо простого ответа (true / false) в качестве возврата этой функции (response JSON .success / responseText.success). В противном случае браузер отправляет мне ошибку или результат ошибки с описанным содержимым

function isUnique(inputObject) {
    let type = $(inputObject).attr('id');
    let res = $.ajax({
      url: '/dbajax.php',
      method: 'POST',
      data: {[type]: $(inputObject).val()},
      dataType: 'JSON',
      success: function(data) { return data },
      error: function(data) { }
    })
    console.log(res.responseJSON.success); // -> error: Cannot read property 'success' of undefined

console.log(res.responseJSON); // -> undefined
    return res;
}
<?php
require('db/dbqueries.php');

if(isset($_POST['username'])){
  $login_username = select_login_where_username ($_POST["username"]);
  echo json_encode(array('success' => empty($login_username),));
}

if(isset($_POST['email'])){
  $profile_email = select_profile_email_where_email ($email);
  echo json_encode(array('success' => empty($profile_email),));
}
?>

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Вы пытаетесь получить доступ к ответу JSON до завершения запроса ajax. вам нужно подождать, пока ajax не завершится sh, прежде чем вы сможете его использовать. Это можно сделать двумя способами:

Как уже упоминалось в robinvrd, используйте функции success и error:

function isUnique(inputObject) {
    let type = $(inputObject).attr('id');
    let res = $.ajax({
      url: '/dbajax.php',
      method: 'POST',
      data: {[type]: $(inputObject).val()},
      dataType: 'JSON',
      success: function(data) { 
          console.log(data.success); //this will fire when the ajax request is finished and return the data
      },
      error: function(data) {
         console.error(data); //this will tell you of any errors after the request has been made
     }
    })
    return res;
}

или используйте обратные вызовы для объекта запроса:

function isUnique(inputObject) {
    let type = $(inputObject).attr('id');
    let res = $.ajax({
      url: '/dbajax.php',
      method: 'POST',
      data: {[type]: $(inputObject).val()},
      dataType: 'JSON'
    })

    res.done(function(result) {
       console.log(res.responseJSON.success); 
    });

    res.fail(function( jqXHR, textStatus) {
       console.error("Request failed: " + textStatus);
    });

    return res;
}
0 голосов
/ 05 февраля 2020

Ваша проблема связана с тем, что $. ajax является асинхронным. Поэтому, если вы напишите что-то после $. ajax, это будет сделано до того, как запрос будет обработан. Вы должны сделать все в функции успеха.

function isUnique(inputObject) {
    let type = $(inputObject).attr('id');
    let res = $.ajax({
      url: '/dbajax.php',
      method: 'POST',
      data: {[type]: $(inputObject).val()},
      dataType: 'JSON',
      success: function(data) { console.log(data)},
      error: function(data) { console.log(data) }
    })
    
}
<?php
require('db/dbqueries.php');

if(isset($_POST['username'])){
  $login_username = select_login_where_username ($_POST["username"]);
  echo json_encode(array('success' => empty($login_username),));
}

if(isset($_POST['email'])){
  $profile_email = select_profile_email_where_email ($email);
  echo json_encode(array('success' => empty($profile_email),));
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...