我正在开发一个需要检查产品是否存在的应用程序,所以我选择了Jquery,因为它很容易使用但是我在检查产品是否存在时遇到了一些麻烦
我有一个带有一个sigle行的表,并在其td标签上输入,iT以这种方式工作;您键入产品代码并按ENTER键以检查是否存在,如果存在,则应显示警告说" EXISTS"如果不是,则会发出警告说“不存在”#34;我已经注册了一个产品代码是" ioi909090io",所以当我按下ENTER时说" NOT EXISTS"但是后来显示php输出,如果产品存在php,请输出#e;回显真实;&#34 ;,所以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() { });
}
我处理ajax的php文件:
<?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");
}
}
});
所以现在我迷失了,我真的不明白什么是错的可能这只是我错过的一件小事,我希望你们能帮助我。
答案 0 :(得分:1)
您需要了解功能范围。 return true;
行确实返回true,但外部函数(comprobarExistencia
)没有显式返回任何内容,因此它只返回undefined
。你的success: function()...
行实际上只是另一个功能。因此,在此成功处理程序中,使用返回值调用另一个函数来执行您想要的操作。
同样问题的一个很好的例子可以在How do I return the response from an asynchronous call?
找到这个问题的核心是理解异步javascript(或一般的异步编程概念)。