我有一个javascript文件,其中我正在向foo.php
执行ajax请求
为了得到一个mysql数组的结果。
这是我的javascript文件。
//foo.js
$(document).ready(function(){
$.ajax({
url:"foo.php",
type:"POST",
data:{
action:"test",
remail:"foo"
},
success:function(data){
var messages = data;
console.log("Ext req");
try{
console.log(JSON.parse(data));
}catch(e){
console.log(data);
}
},
failure:function(){
}
})
});
为了从php接收我的结果数组,我执行以下操作:
//foo.php
<?php
if(isset($_POST)){
$action = $_POST['action'];
if(empty($action)){
return;
}
switch($action){
case "test":
$query = "select * from message where seen";
$ar = [];
$res = mysqli_query($con,$query);
while($row = mysqli_fetch_array($res)){
$ar[] = $row;
}
echo json_encode($ar);
break;
}
}
?>
这会将一个对象数组返回给我的ajax请求,然后根据我的需要处理。 但是,如果我尝试将switch语句中的php代码移动到函数中并返回函数的编码结果,我只得到一个空数组作为响应。 以下是我尝试这样做的方法:
<?php
function test(){
$query = "select * from message where seen";
$ar = [];
$res = mysqli_query($con,$query);
while($row = mysqli_fetch_array($res)){
$ar[] = $row;
}
return $ar;
}
if(isset($_POST)){
$action = $_POST['action'];
if(empty($action)){
return;
}
switch($action){
case "test":
$result = test();
echo json_encode($result);
break;
}
}
?>
为什么会发生这种情况?
$con
是来自另一个文件I include
答案 0 :(得分:1)
当您将查询逻辑移动到函数$con
时,MySQL的连接对象不可用。在你的功能中使用GLOBAL $con;
。
阅读本文以了解Variable Scope
方法1
使用GLOBAL
关键字
function test(){
GLOBAL $con;
$query = "select * from message where seen";
$ar = [];
$res = mysqli_query($con,$query);
while($row = mysqli_fetch_array($res)){
$ar[] = $row;
}
return $ar;
}
方法2 将参数传递给函数
function test($con){
$query = "select * from message where seen";
$ar = [];
$res = mysqli_query($con,$query);
while($row = mysqli_fetch_array($res)){
$ar[] = $row;
}
return $ar;
}
Call it like this:
test($con);
答案 1 :(得分:1)
如果不仔细使用全局变量,可能会像其他解决方案建议的那样难以找到问题。将$con
作为参数传递给您的函数:
function test($con){
$query = "select * from message where seen";
$ar = [];
$res = mysqli_query($con,$query);
while($row = mysqli_fetch_array($res)){
$ar[] = $row;
}
return $ar;
}
答案 2 :(得分:1)
让我们谈谈你遇到的问题:
您将failure
函数传递给$.ajax
。您肯定希望使用error
代替failure
。请参阅here。
您已初始化messages
变量,但在success
内未使用。摆脱它。
您检查isset($_POST)
,但始终为true
。您想要检查isset($_POST["action"])
,或者您想查看whether it is a POST request。
$con
在function
内无法使用。您需要在function
内对其进行初始化或将其传递给它并将其用作参数。