Javascript 使用AJAX请求检索信息
我有一个数据库,其中有一列名为“财富”。我有一些代码可以访问数据库,并找到与登录到该网站的用户相关的财富。它将值存储在$result中。这是:Javascript 使用AJAX请求检索信息,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我有一个数据库,其中有一列名为“财富”。我有一些代码可以访问数据库,并找到与登录到该网站的用户相关的财富。它将值存储在$result中。这是: <!DOCTYPE html> <html> <body> <?php $username = strval($_GET['userName']); $con = mysqli_connect('localhost','id550644_uselessbutton','PRIVATE','id550644_us
<!DOCTYPE html>
<html>
<body>
<?php
$username = strval($_GET['userName']);
$con = mysqli_connect('localhost','id550644_uselessbutton','PRIVATE','id550644_uselessbutton');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
} else {
$sql="SELECT * FROM users WHERE username = '".$username."'";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)) {
$wealth = $row['wealth'];
echo "<p>";
echo $wealth;
echo "</p>";
}
}
mysqli_close($con);
//return $wealth;
?></body>
</html>
当前PHP代码:
<!DOCTYPE html>
<html>
<body>
<?php
$username = strval($_POST['username']);
$wealth = strval($_POST['wealth']);
$con = mysqli_connect('localhost','id550644_uselessbutton','PRIVATE','id550644_uselessbutton');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
} else {
$sql = "UPDATE users SET wealth=".$wealth." WHERE username='".$username."'";
$result = mysqli_query($con,$sql);
}
mysqli_close($con);
?></body>
</html>
JavaScript无法访问PHP变量,因为JavaScript是客户端(并且只能针对DOM),而PHP是服务器端。为了使用JavaScript将PHP变量作为目标,必须使用HTML作为中介。我建议使用PHP创建一个包含变量的DOM元素,然后使用JavaScript将其作为目标
在本例中,您似乎试图以$wealth
为目标,因此您应该添加一个唯一标识:
echo "<p id='wealth'>";
echo $wealth;
echo "</p>";
如果您想将$result
本身作为目标,则还需要物理输出其内容。请记住,如果您想通过JavaScript更新$result
,则需要将数据发回后端,最有可能是使用AJAX:)
编辑
要在多个页面上访问JavaScript变量,有两种方法:
1) 在每个页面上的一个(可能隐藏的)DOM元素中输出目标变量,并使用上述脚本在每个页面上以该ID为目标
2) 在PHP脚本中输出目标变量,然后使用AJAX加载PHP脚本,如下所示:
PHP页面:
<?php
echo $wealth;
?>
在这里的AJAX帖子中,data
是成功调用PHP脚本时返回的内容。本质上,如果您要访问浏览器中的PHP文件,那么它就是输出的所有内容。假设您在PHP页面上回显wealth变量,并且仅回显wealth变量,这就是要传递的内容,因此JavaScript变量wealth将与PHP变量的值相同
方法1要求您在每个页面上都有相当数量的PHP,您希望能够从中访问JavaScript变量,但速度稍快,因为它不需要进行外部调用
方法2(使用AJAX)更整洁,易于扩展以检索多个变量,如果您想更新PHP变量,还允许您轻松地将数据发布到服务器。请注意,此方法需要jQuery,并且您必须为要在其上输出wealth
变量的每个页面运行上述脚本
要使用方法2检索多个值,您可以从PHP脚本中创建一个数组或JSON输出,并按如下方式访问它们:
PHP输出:
[wealth, value2]
JavaScript:
var wealth = document.getElementById('wealth').innerHTML;
var wealth, value2;
$.ajax({
type: "GET",
url: 'yourphpscript.php',
success: function (data) {
wealth = data[0];
value2 = data[1];
}
});
希望这有帮助!:) 您可以发出ajax请求
$.ajax({
'type': "GET",
'url': <filename which has php code>,
'success': function (data) {
document.getElementById('<wherever you want to show results>').innerHTML = data;
}
});
$.ajax({
'类型':“获取”,
“url”:,
“成功”:函数(数据){
document.getElementById(“”).innerHTML=数据;
}
});
更新:您可以使用类似的
getScore.PHP中的PHP代码
<?php
//make connection
//query the database
//return result in $wealth
echo $wealth;
?>
表单所在的HTML文件中的JavaScript代码
// Include jQuery version file in <head>
<script>
var wealth;
$.ajax({
'type': "GET",
'url': "getScore.php",
'success': function (data) {
wealth = data;
}
});
console.log(wealth); //This will have the value returned by PHP variable
</script>
//将jQuery版本文件包括在
var财富;
$.ajax({
'类型':“获取”,
“url”:“getScore.php”,
“成功”:函数(数据){
财富=数据;
}
});
控制台日志(财富)//这将有PHP变量返回的值
AJAX调用是异步调用,因此您需要将async标志设置为false,以便它在将x分配给clicks之前等待数据到来并分配给x
$.ajax({
'type': "GET",
'url': "getScore.php",
**async: false,**
'success': function (data) {
var x = data;
}
});
var clicks = x;
使用var wealth=document.getElementById('wealth').innerHTML;在本文档中,风险值只会在本文档中产生财富,不是吗?我将无法从其他文档访问它。我错了吗?在某种程度上是正确的——JavaScript变量对于创建它们的页面都是唯一的。当然,您可以做的是在外部.js
文件中创建JavaScript变量,并将该文件包含在每个页面的PHP头文件中。然后该JavaScript变量在每个页面上都有作用域:)只要确保在加载外部JavaScript文件后引用该变量;)有趣的你看过Riya在下面建议的其他方法吗?虽然还没有实现,但似乎很简单……我刚刚更新了这个答案,希望能对AJAX方法的工作原理以及如何扩展提供一个清晰的解释——请参阅我答案的编辑部分:)为了保持简单,请观看此视频并根据您的需要进行修改。对不起,“数据”是什么?数据是php文件返回的任何值。如果php打印出字符串“OK”,那么这个数据变量将包含字符串“OK”。任何打印/回显的输出都将返回到success函数。那么,如何让这个AJAX请求以$wealth PHP变量为目标呢?如何使javascript中指定的变量等于此ajax请求的输出ID?谢谢。在php文件中,添加echo$wealth。在编写AJAX请求的另一个文件中,请确保在“success”函数中包含jQuery和var x=data;其中x是变量名。作为参考,.ajax()
请求的参数周围不应有单引号。例如,'type':“GET”,
应该是type:“GET”,
——也许这就是您出错的原因?:)虽然这是事实,但我个人不建议强制ajax调用是同步的。
// Include jQuery version file in <head>
<script>
var wealth;
$.ajax({
'type': "GET",
'url': "getScore.php",
'success': function (data) {
wealth = data;
}
});
console.log(wealth); //This will have the value returned by PHP variable
</script>
$.ajax({
'type': "GET",
'url': "getScore.php",
**async: false,**
'success': function (data) {
var x = data;
}
});
var clicks = x;