将MySQL行计数传递给javascript

Passing MySQL row count to javascript

本文关键字:javascript MySQL      更新时间:2023-09-26

我一直在尝试找到一种方法,将MySQL行数用作Javascript中的变量。在闲逛了一段时间后,我总是得到"未定义"作为我的变量。

我对PHP和MySQL很陌生,但我对Javascript有些了解。

到目前为止,我已经尝试了以下几种:

script.js

var result = (function() {
            $.get( "submissioncount.php", function( data ) {
              console.log( data );
              return data;
            });
        })();

submissioncount.php

$sql = "SELECT * FROM table";
mysql_select_db('database');
$result = mysql_query( $sql, $conn );
$num_rows = mysql_num_rows($result);
echo "$num_rows";

console.log为我提供了正确的数值,但"result"未定义。

关于如何让它发挥作用,有什么建议吗?

谢谢。

您需要在$.get内部创建一个回调,或者使用promise来设置您的变量。也可能是您从嵌套函数返回。请阅读有关延期的信息。

您在作用域方面遇到了一个问题,当您刚开始异步编程时,很难发现这个问题——默认情况下,所有AJAX调用都是这样。

当您$.get某个东西时,jQuery会对您的服务器进行http调用,服务器会在某个时刻做出响应。由于你的浏览器不知道响应需要多长时间,它会让该呼叫在后台等待,直到服务器回复,而不是阻止网站的其他部分运行。当你的浏览器收到响应时,它可以使用从服务器获得的信息执行你提前给它的函数——回调。

您需要的代码如下所示:

function doThingsWithAjaxInfo (stuff) {
    // whatever you want your code to do with the information from the server
}
(function() {
        $.get( "submissioncount.php", function( data ) {
              doThingsWithAjaxInfo(data);
        });
})();
// the same thing but a little cleaner, your callback will automatically be called
// on the data that is returned from the server.
(function() {
        $.get( "submissioncount.php", doThingsWithAjaxInfo);
})();

注意get函数中没有返回。由于ajax请求几乎立即完成(但在服务器回复之前不会触发其回调),因此它的返回对您没有用处(除非您想使用promise,但我不建议您在更熟悉常规回调驱动的异步控制流之前使用它们。

在javascript中处理作用域是很困难的,尤其是当您使用ajax等异步技术时,但它使您的代码变得非常强大,而且值得努力将其做好。祝你好运