我正在开发一个网页,只要有人使用我在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响应将等于true
或false
,这是我在if
语句中提出的问题。 Javascript代码。
答案 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猜测。