带有AJAX响应的IF条件或AJAX response.response.Text不起作用

时间:2016-05-08 20:25:19

标签: javascript php jquery ajax

我正在开发一个网页,只要有人使用我在AJAX请求中发送的相同'mesa'列在数据库表中插入新元组,就会显示警报,因此为此我创建了一个Javascript我不断发送AJAX请求的计时器,检查我的数据库表中是否有新的元组,到目前为止定时的AJAX请求正在运行,但是当我想用if调整响应时,看看是否有它的值等于某个值,它只是完全跳过它,所以即使AJAX响应请求抛出的值是正确的,我也无法显示警报,所以我想知道我做错了什么,我一直在分析代码超过2个小时,我似乎没有找到错误,我甚至显示警告,以验证response是否等于0或1,表明他们确实正确显示它们,并且我也使用response.responseText,任何帮助都会非常感谢,非常感谢你。

这是我的Javascript文件

var Solicitud_Comandas = [];


for (var k = 1; k <= 15; k++) {
      Solicitud_Comandas[k] = SolicitudComanda(k);

      if(!sessionStorage.getItem("rm"+k))
      {
            sessionStorage.setItem("rm"+k,false);
      }
}

function SolicitudComanda(k)
{
      return function() {
            $(document).ready(function()
            {
            $.ajax({
            type: "POST",
            url: "Consultar_Comandas_Pendientes.php",
            data: {mesa : k},
            complete: function (response, TextStatus)
            { 
                  MensajeAlerta(response,k);
      },
      fail: function (resultado,TextStatus)
      {
            alert("it didn't work because... " + resultado+ " " +TextStatus);
      }
});
});
}
}

function MensajeAlerta(response,m)
{


            if(response == 0 )
            {
                  sessionStorage.removeItem("rm"+m);
                  sessionStorage.setItem("rm"+m,false);
            }
            else if (response == 1)
            {
                  if(sessionStorage.getItem("rm"+m) == "false")
                  {
                        alert("Hay una comanda pendiente en la mesa "+m);
                        sessionStorage.removeItem("rm"+m);
                        sessionStorage.setItem("rm"+m, true);
                  } 
            }
}

Temporizador= setInterval(SolicitudDeComanda,2500);

function SolicitudDeComanda()
{ 

      $(document).ready(function(){

            for (var l =1; l<= 15; l++) {
                  Solicitud_Comandas[l]();   
            };

      });

}      

这是Consultar_Comandas_Pendientes.php

    <?php 
    require "Conexion.php";
    $NumeroMesa = $_POST["mesa"];
    $Platillos = 0;
    $filas = false;
    $SelectionRows = "SELECT * FROM comandapendiente WHERE mesa = '$NumeroMesa'";
    $rows = mysqli_query($con,$SelectionRows);
    while($reg = mysqli_fetch_array($rows))
    {   

        if(isset($reg["id"]))
        {
            $filas = true;
            $Platillos++;
        }
    }


    if ($filas == true)
    {

        echo true;
    }
    else
    {
        echo false;
    }

    mysqli_close($con);
    ?>

正如您所看到的,如果有一个新元组,那么AJAX响应将等于truefalse,这是我在if语句中提出的问题。 Javascript代码。

1 个答案:

答案 0 :(得分:1)

您遇到的第一个问题是使用$.ajax({ ... complete:属性并假设回调的第一个参数是您的数据。但事实并非如此,它是请求对象(参见documentation)。使用success:代替complete:,然后将数据作为回调函数的第一个参数。

你遇到的第二个问题是PHP行:

echo false;

这不会回应任何东西,因为在PHP中需要将false转换为字符串时,它变为空字符串,与其他语言不同,它变为&#34; 0&#34;或&#34; false&#34;。

因此,您最好在PHP中回显文字字符串,例如:

echo "1";

echo "0";

此外,确保PHP不输出除0或1之外的任何内容。具体检查<?php标记之前或{{{}之前是否没有空格,制表符,空行...等1}}标签。如果您有几个这样的开始和结束标记,请尝试将它们连接到一个PHP块中。

出于同样的原因,请确保将PHP保存为UTF-8 ,无需BOM 。字节顺序标记是一个三字符序列,有时保存在文件的开头,以便将字符编码声明为UTF-8。但是这个序列也将成为响应的一部分。大多数编辑都可以选择使用或不使用BOM进行保存。

对您的代码的一些评论

在其他函数中看到?>有点奇怪。虽然这种方法很好,但通常不会这样做。通常没有理由将它放在另一个函数中。一切都好,如果你只使用一次,只在这个位置:

$(document).ready(...)

写入本地存储时,我会将$(document).ready(function(){ Temporizador= setInterval(SolicitudDeComanda,2500); }); 写为字符串:

false

没有引号就可以正常工作,但是你依赖于JavaScript将它转换为该字符串的事实。我相信您的代码看起来更好,sessionStorage.setItem("rm"+k, "false"); 显式写为字符串。

此外,如果您正在"false"之后,似乎没有必要致电removeItem()setItem()使用相同的密钥覆盖任何现有值。

在对响应数据的测试中,进行字符串比较会更有意义,因为PHP返回的数据将是字符串。所以喜欢:

setItem()

...并添加if(response == "0") 以捕捉任何意外的值(&#34; 0&#34;或&#34; 1&#34;除外),以便您了解它(通过警报)或某事)。

如果您在值0或1之前遇到一些意外字符时出现问题,并且您无法通过移除PHP文件中的BOM和任何空白区域来解决这些问题,那么可以通过以下方法解决问题:像这样放松你的考试:

else

最好在ajax调用中指定if (response.indexOf('0') !== -1) 选项,所以不要将其留给jQuery猜测。