Jquery函数在运行php脚本时表示未定义

Jquery函数在运行php脚本时表示未定义,php,jquery,sql,ajax,Php,Jquery,Sql,Ajax,当你点击一个按钮“投赞成票”时,我基本上做到了这一点 目前我有 clients.php <?php $clientInfo = "SELECT * FROM Clients ORDER BY Client ASC"; $stmt = sqlsrv_query($conn, $clientInfo); echo "<div style='width: 100%; display: inline-block;'>"; while ($client = sqlsrv_fetch

当你点击一个按钮“投赞成票”时,我基本上做到了这一点

目前我有

clients.php

<?php

$clientInfo = "SELECT * FROM Clients ORDER BY Client ASC";
$stmt = sqlsrv_query($conn, $clientInfo);

echo "<div style='width: 100%; display: inline-block;'>";

while ($client = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
{
    echo "<div class='clientid' style='height: 50px; font-size: 18px; vertical-align: middle; display: inline-block; width: 100%'>" . 

            "
            <div style='width: 35%;'></div>

            <div onclick=\"voteUp()\" style='display: inline-block; width: 5%;'>      
                <span style='font-size: 20px;' class='hover-cursor fa fa-chevron-up vote-up'></span>
            </div>" .

                 "<div class='hover-cursor hvr-underline-reveal' style='width: 20%; display: inline-block;' data-clientid='{$client['ClientID']}'>" . $client['Client'] . "</div>" . 

            "<div onclick=\"voteDown()\" style='display: inline-block; width: 5%;'>
                <span style='font-size: 20px; text-align: right;' class='hover-cursor fa fa-chevron-down vote-down'></span>
            </div>

            <div style='width: 35%;'></div>

         </div> 
        <br />";
}

echo "</div>";

?>
<?php include 'connectionDetails.php'; ?>

<?php

if (isset($_POST['clientid'])) 
{
    $voteup = "UPDATE Clients SET Pos = (SELECT MAX(Pos) FROM Clients) + 1 WHERE ClientID = " . $_POST['clientid'];

    $stmt = sqlsrv_query($conn, $voteup);
}
else
{
    echo "No ClientID";
}

?>
最后在voteup.php中

<?php

$clientInfo = "SELECT * FROM Clients ORDER BY Client ASC";
$stmt = sqlsrv_query($conn, $clientInfo);

echo "<div style='width: 100%; display: inline-block;'>";

while ($client = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
{
    echo "<div class='clientid' style='height: 50px; font-size: 18px; vertical-align: middle; display: inline-block; width: 100%'>" . 

            "
            <div style='width: 35%;'></div>

            <div onclick=\"voteUp()\" style='display: inline-block; width: 5%;'>      
                <span style='font-size: 20px;' class='hover-cursor fa fa-chevron-up vote-up'></span>
            </div>" .

                 "<div class='hover-cursor hvr-underline-reveal' style='width: 20%; display: inline-block;' data-clientid='{$client['ClientID']}'>" . $client['Client'] . "</div>" . 

            "<div onclick=\"voteDown()\" style='display: inline-block; width: 5%;'>
                <span style='font-size: 20px; text-align: right;' class='hover-cursor fa fa-chevron-down vote-down'></span>
            </div>

            <div style='width: 35%;'></div>

         </div> 
        <br />";
}

echo "</div>";

?>
<?php include 'connectionDetails.php'; ?>

<?php

if (isset($_POST['clientid'])) 
{
    $voteup = "UPDATE Clients SET Pos = (SELECT MAX(Pos) FROM Clients) + 1 WHERE ClientID = " . $_POST['clientid'];

    $stmt = sqlsrv_query($conn, $voteup);
}
else
{
    echo "No ClientID";
}

?>

当我用onclick=“voteUp()”单击向上投票按钮时,该按钮是DIV

为什么控制台中出现错误,说“ReferenceError:voteUp未定义”

为什么控制台中会出现错误,说“ReferenceError:voteUp未定义”

范围

voteUp()
voteDown
在启动块中定义(在
$(文档)的
{}
中)。就绪(函数()…
因此在此块外不可用

您需要将两个功能移到外部:

$(document).ready(function() {
    ...
});

function voteUp()
{
    $.get("voteup.php");
    return false;
}

function voteDown()
{
    $.get("votedown.php");
    return false;
}

你已经确定了方法的范围

相反,您可以将它们附加到窗口,以便从任何地方都可以访问

window.voteUp  = function()
{
    $.get("voteup.php");
    return false;
}

window.voteDown = function()
{
    $.get("votedown.php");
    return false;
}

为什么不使用jQuery而不是内联JS?请给出div的类:

<div class="voteup" data-clientid="{$client['ClientID']}">...</div> 
由于您已经在使用jQuery,这将帮助您保持标记的整洁,让您可以更轻松地更改标记和JavaScript

此外,这将消除作用域问题,这样您就不必添加名称空间

我看到的另一个问题是,您没有将
$\u POST['clientid']
传递到voteup.php,因此您的查询将永远不会运行。您可以在
div
声明中包含
数据客户端id
,但您必须将php中的测试更改为:

if (isset($_GET['clientid'])) 

因为您将通过GET请求随WWW一起发送值。

是否正确包含脚本?我的整个显示页面(clients.php)但是是的,文件夹和位置是正确的。这修复了我的错误,所以我将投票作为答案,但我只是想知道为什么没有发生任何事情,当我检查我的数据库时,列值仍然是相同的,错误消失了,来自控制台的唯一反馈是“GET xhr”voteup.php“但出于某些原因,它没有点击我的查询,因为您正在发送$.get调用。它需要是$.post调用,并且带有诸如客户端id之类的数据,因为您使用的是
if(isset($\u post['clientid'))
@JayBlanchard我不确定这个问题的相关性。Document ready用于在DOM准备好后初始化事件等;它不是用于定义可重用函数,这里就是这种情况。@JayBlanchard,这与(后面的)完全相同接受答案。我被你的评论弄糊涂了。@JayBlanchard我很惊讶你这么说。在function()块内声明的函数的作用域是该函数块。它们不能从该函数块外调用。它们可以从该函数块中定义的事件中调用,但这里不是这样(但在重构事件声明方式的有效建议中)示例:(检查控制台)这都是关于作用域的。内联JS调用是针对全局作用域中的函数的。也许我之前的评论措词不好。我想说的是,可重用函数可以在任何地方定义,但为了避免作用域问题,您必须正确地调用它们或为它们命名名称。
if (isset($_GET['clientid']))