PHP说真的但是Jquery AJAX说错了

时间:2014-09-15 01:36:44

标签: php jquery ajax

我正在开发一个需要检查产品是否存在的应用程序,所以我选择了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");
        }
    }
});

所以现在我迷失了,我真的不明白什么是错的可能这只是我错过的一件小事,我希望你们能帮助我。

1 个答案:

答案 0 :(得分:1)

您需要了解功能范围。 return true;行确实返回true,但外部函数(comprobarExistencia)没有显式返回任何内容,因此它只返回undefined。你的success: function()...行实际上只是另一个功能。因此,在此成功处理程序中,使用返回值调用另一个函数来执行您想要的操作。

同样问题的一个很好的例子可以在How do I return the response from an asynchronous call?

找到

这个问题的核心是理解异步javascript(或一般的异步编程概念)。