首页 > 解决方案 > 函数调用不返回控制 AJAX - PHP - MYSQLI

问题描述

我已经检查了所有与此类似的问题,但没有发现任何有帮助的东西……所以就这样吧!

我正在为我的大学项目设计一个网站。它只是一个图片库。我为每个图像显示一个计数器,每次单击图像时都会递增。当页面刷新时,将显示新号码。跟我到现在?

问题是数据库更新完成后返回没有完成其余的代码......

echo "<div class='gridImg'><a href=".$imgpath." data-lightbox='countryside' data-title='".$row['ldesc']."' onclick='"."showUser(&#39".$fname."&#39)'>";

上面的行在一个 php 文件中,有问题的函数是 showUser,它传递了一个变量 $fname...

function showUser(str) {
    if (str === "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else { 
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        } 
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = 
                this.responseText;
            }
        };
        xmlhttp.open("GET","../php/countrysideupdateviews.php?q="+str,true);
        xmlhttp.send();
        return;
    }
}

上面的脚本获取传递的值并将其交给 countryupdateviews.php (对不起,如果这个脚本是一团糟,我是 AJAX 新手,从 W3Schools 站点获取。

<?php
$q = $_GET['q'];
$conn=new mysqli('localhost','user','pass','dbname');
$sql="UPDATE countryside SET views = views + 1 WHERE fname = '".$q."'";
$result=$conn->query($sql);
mysqli_close($conn);
?>

上面的 php 文件更新数据库。

行...

因此,用户单击屏幕上的其中一个图像,这将打开一个灯箱画廊,但也会更新查看次数,然后返回控制权 - 除了一切正常 - 更新发生 - 但灯箱没有启动,而是显示了被点击的那个的静态大图。清除它的唯一方法是刷新站点,这确实反映了更新的计数器。

我已将返回添加到确实返回控制但计数器未更新的 onclick 函数调用。我哪里错了?请记住,我仍在学习,我希望这是有道理的:)

标签: javascriptphphtmlajaxmysqli

解决方案


to 的参数onclick必须是一个函数。showUser("foo")不是函数。您还缺少event.preventDefault()阻止点击操作打开链接的信息。

改变你showUser

function showUser(str) {
  return function(event) {
    if (str === "") {
      document.getElementById("txtHint").innerHTML = "";
    } else {
      if (window.XMLHttpRequest) {
        var xmlhttp = new XMLHttpRequest();
      }
      xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById("txtHint").innerHTML = this.responseText;
        }
      };
      xmlhttp.open("GET","../php/countrysideupdateviews.php?q="+str,true);
      xmlhttp.send();
    }
    event.preventDefault();
  };
}

推荐阅读