PHP сказал верно, но Jquery AJAX сказал ложь

Я разрабатываю приложение, которое должно проверить, существует ли продукт, поэтому я выбрал Jquery, потому что его действительно легко использовать, но у меня возникают некоторые проблемы с проверкой, существует ли продукт или нет

У меня есть таблица с одной строкой sigle и входами для ее тэгов, и iT работает таким образом; Вы вводите код продукта и нажимаете клавишу ВВОД, чтобы проверить, существует или нет, если он есть, на нем должно появиться предупреждение «СУЩЕСТВУЕТ», а если нет — предупреждение «НЕ СУЩЕСТВУЕТ». У меня уже есть зарегистрированный продукт, код которого «ioi909090io», поэтому, когда я нажимаю клавишу ВВОД, он говорит «НЕ СУЩЕСТВУЕТ», но затем показывает вывод php, который равен 1, если продукт существует, php делает «echo true», поэтому php говорит «да» и jquery Сказал нет. Чтобы вы лучше поняли, я поделюсь с вами кодом.

Моя таблица в HTML с входами:

<table class="table table-bordered">
<thead>
<tr>
<th>Codigo</th>
<th>Descripción</th>
<th>Unidades</th>
<th>Precio</th>
<th></th>
</tr>
</thead>
<tbody id="tblsurtir">
<tr class="parenttr">
<td width="20%">
<input type="text" class="form-control input-sm codigop" value="ioi909090io">
</td>
<td>
<input class="form-control input-sm campossurtir campossurtirdescr" disabled>
</td>
<td width="10%">
<input type="text" class="form-control input-sm campossurtir campossurtirunidades" disabled>
</td>
<td width="10%">
<input type="text" class="form-control input-sm campossurtir campossurtirprecio" disabled>
</td>
<td width="5%">
<button class="btn btn-danger btn-xs deleterowproduct" data-toggle="tooltip" data-placement="right" title="Borrar"><span class="glyphicon glyphicon-minus"></span></button>
</td>
</tr>
</tbody>
</table>

Мой файл Js:

function comprobarExistencia() {
//this variable is the code of the product that i want to check
var codigoSeleccionado = document.activeElement.value;
$.ajax({
type: "POST",
url: "PeticionesAjax.php",
data: { codigoSeleccionado: codigoSeleccionado, action: "checkprodexists" },
success: function(data) {
alert(data); //this line print data and it show 1
return true; //this suppossed to return true
} })
.done(function(data) { alert(data.slice(0, 100)); }) //it says 1 too obviously
.fail(function() {  })
.always(function() {  });
}

И мой PHP-файл, который обрабатывает AJAX:

<?php

require_once "core/init.php";

if (Ajax::exists()) {
$almacen = new Almacen(new DB);
switch (Input::get("action")) {
case 'checkprodexists':
$prod = $almacen->prodExists(Input::get("codigoSeleccionado"));
if ($prod){
//this is the 1 that appears on message
echo true;
}else {
echo false;
}
break;
case 'newprod':
$nvoprod = $almacen->newProd(array(Input::get("codigoactual"),
Input::get("newDescr"),
Input::get("newUnidades"),
Input::get("newPrecio")));
if ($nvoprod) {
echo true;
}else {
echo false;
}
break;
default:
echo "ERROR";
break;
}
}

?>

обратно в мой файл JS у меня есть это:

$(document).keypress(function(e){
//this line detect when the input wich contains the code of product is "submited"if (e.which == 13 && $(".codigop").is(":focus")) {
//var codigoSeleccionadoid = document.activeElement.id;
if(validarCodigo()) { //this only validate if the code has the right format

//NOW THIS LINE IT'S DRIVING ME CRAZY
//this function suppossed to return true beacuse product exists but that not happening
if(comprobarExistencia()) {
alert("EXISTS");
}else {
//this is the message that it shows
alert("NOT EXISTS");
}
}else {
alert("formato invalido");
}
}
});

так что теперь я заблудился, я не совсем понимаю, в чем дело, может быть, это просто маленькая вещь, которую я пропустил, надеюсь, вы, ребята, можете мне помочь.

-1

Решение

Вы должны понимать область действия функции. return true; строка действительно возвращает true, но внешняя функция (comprobarExistencia) ничего не возвращает явно, поэтому просто возвращает undefined, Ваш success: function()... линия на самом деле просто еще одна функция. Итак, в этом обработчике успеха вызовите другую функцию, чтобы сделать то, что вы хотите с возвращаемым значением.

Отличный пример этой же проблемы можно найти по адресу: Как мне вернуть ответ от асинхронного вызова?

В основе этой проблемы лежит понимание асинхронного JavaScript (или концепции асинхронного программирования в целом).

1

Другие решения

Других решений пока нет …