带有 AJAX 响应或 AJAX 响应的 IF 条件.响应.Text 不起作用
IF condition with AJAX response or AJAX response.response.Text is not working
我正在开发一个网页,一旦有人使用我在 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
这就是我对 Javascript 代码中 if
语句的质疑。
您遇到的第一个问题是由使用 $.ajax({ ... complete:
属性并假设回调的第一个参数是您的数据引起的。但它不是,它是请求对象(请参阅文档(。使用 success:
而不是 complete:
,然后获取数据作为回调函数的第一个参数。
您遇到的第二个问题是由 PHP 行引起的:
echo false;
这不会回显任何东西,因为在 PHP 中,当false
需要转换为字符串时,它变成了空字符串,不像在其他语言中,它变成了"0"或"false"。
所以你应该更好地回显 PHP 中的文字字符串,比如:
echo "1";
和
echo "0";
另外,请确保 PHP 除了 0 或 1 之外不会输出任何其他内容。具体检查是否有空格,制表符,空行...等,在<?php
标签之前或?>
标签之后。如果你有几个这样的开始和结束标签,试着把它们连接成一个PHP块。
出于同样的原因,请确保将PHP保存在没有BOM的UTF-8中。字节顺序标记是一个三字符序列,有时保存在文件的开头,以便将字符编码声明为 UTF-8。但这个序列也将成为响应的一部分。大多数编辑者都可以选择使用或不带 BOM 进行保存。
关于代码的一些注释
在其他函数中看到$(document).ready(...)
有点奇怪。虽然这工作正常,但通常不会这样做。通常没有理由将其放在另一个函数中。一切正常,如果你使用它一次,只在这个位置:
$(document).ready(function(){
Temporizador= setInterval(SolicitudDeComanda,2500);
});
写入本地存储时,我会false
写为字符串:
sessionStorage.setItem("rm"+k, "false");
没有引号就可以正常工作,但是您随后依赖于JavaScript将其转换为该字符串的事实。我相信您的代码在显式编写为字符串"false"
后看起来更好。
此外,如果您正在立即进行setItem()
,似乎没有必要致电removeItem()
。 setItem()
使用相同的键覆盖任何现有值。
在对响应数据的测试中,进行字符串比较更有意义,因为 PHP 返回的数据将是字符串。所以喜欢:
if(response == "0")
。并添加一个else
来捕获任何意外值("0"或"1"除外(,以便您知道它(通过警报或其他方式(。
如果您在值 0 或 1 之前遇到一些意外字符的问题,并且您无法通过删除 BOM 和 PHP 文件中的任何空格来摆脱这些字符,那么可以通过像这样放松测试来解决此问题:
if (response.indexOf('0') !== -1)
最好在 ajax 调用中指定 dataType: 'text'
选项,因此不要将其留给 jQuery 来猜测。
- 如何从php返回php变量值以及html响应ajax
- PHP:响应 AJAX 发布请求
- 从 php 响应 AJAX 的更好方法
- 如何将响应 ajax 发送到 html
- 处理服务器响应AJAX
- Twitter Bootstrap Rails按钮下拉列表没有响应AJAX
- 状态200 OK,相同的域,有效的JSON数据,没有响应(Ajax)
- 多个JSON数组作为响应-AJAX&PHP
- 稍后再响应AJAX请求
- Jquery的JSON响应.ajax四舍五入较大的数字,所以我不能得到正确的值
- 如何响应AJAX调用没有erb.js /为什么使用erb.js
- 是否有可能得到php echo/响应Ajax而不通过Ajax张贴
- 如何发送响应ajax到变量javascript
- Servlet不响应ajax请求
- 为什么嵌入的JavaScript在响应ajax调用时不执行?
- 多响应AJAX请求
- JAVASCRIPT:在本地主机上成功响应Ajax后重定向到主页
- Spring响应ajax: 403错误
- JSON响应AJAX格式错误
- 我如何发送压缩(gzip) JSON作为响应Ajax请求,从Java