带有 JSON 返回的 AJAX 请求没有响应我的预期行为


AJAX request with JSON return is not responding with my expected behavior

我正在尝试编写一个 ajax 调用,该调用检查我的数据库并在发现更改时更新div。

我对JavaScript相对较新,对JSON更陌生。

我认为问题在于我如何返回 JSON 数组,或者如何在 if 语句中使用它,但我不确定如何正确执行此操作。我得出这个结论是基于我从成功函数"连接并执行的 PHP 页面..."获得控制台日志返回的事实,而不是"更新的票证页面...".log。

这是我的JavaScript:

function checkUpdates()
{
  $.ajax({
    type: "POST",
    url: 'ajax/checkDB.php',
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data) {
      console.log('Connected and executed PHP page...');
      if (data.hasChanged == true) {
        console.log('Updated Tickets Page...');
        $("#contents").load("dynamic/tickets.php");
        $("#contents").fadeTo("fast", 1);
      }
    }
  });
}
$(document).ready(function() {
  setInterval("checkUpdates()", 3000);  // Calls the function every 3 seconds
});

这是我的PHP(checkDB.php,在ajax请求中调用),如果它很重要的话。

<?php
        include("../static/config.php");
        session_start();
        header("Content-Type: text/json");
        $result = mysqli_query($con,"SELECT notify FROM tickets WHERE notify='0'");
        $row_cnt = mysqli_num_rows($result);
        if($row_cnt > 0) {
            echo json_encode(array('hasChanged' => 'true'));
            mysqli_query($con,"UPDATE tickets SET notify='1' WHERE notify='0'");
        } else {
            echo json_encode(array('hasChanged' => 'false'));
        }

?>

您有错别字error。您可以更改不带字符串php代码或更改if条件。

//changes made here
if (data.hasChanged == "true") {

.PHP

if($row_cnt > 0) {
            //here you are having string "true"
            echo json_encode(array('hasChanged' => 'true'));
            mysqli_query($con,"UPDATE tickets SET notify='1' WHERE notify='0'");
        } else {
            echo json_encode(array('hasChanged' => 'false'));
        }

在代码截图中,您正在检查字符串'true'是否等于布尔true

您有两种选择:

从 PHP 返回一个布尔值

echo json_encode(array('hasChanged' => true));

echo json_encode(array('hasChanged' => false));

或者你可以用以下方法检查JavaScript中的字符串:

if (data.hasChanged == "true") {

您应该以正确的数据类型返回数据。

当你用问题中的代码对json进行编码时,哪个'true'不是布尔值,所以你的javascript无法将'hasChanged'属性作为布尔值进行比较。

你能试试下面的代码吗?这将使"hasChanged"属性成为布尔值。

echo json_encode(array('hasChanged' => true));