Jquery 返回json数组的PHP在javascript中显示为Null

Jquery 返回json数组的PHP在javascript中显示为Null,jquery,post,Jquery,Post,我有一个ajax调用,它将数据发布到php脚本并返回数据。如果我回显php脚本中的数据,我可以用javascript很好地提醒它。但如果我将其作为json返回,则警报将不显示任何内容 我的javascript $.ajax({ type: "POST", url: url, async: false, data: {1:'Home', 2:'About', 3:'C

我有一个ajax调用,它将数据发布到php脚本并返回数据。如果我回显php脚本中的数据,我可以用javascript很好地提醒它。但如果我将其作为json返回,则警报将不显示任何内容

我的javascript

  $.ajax({
                type: "POST",
                url: url,
                async: false,
                data: {1:'Home', 2:'About', 3:'Contact'},
                success: function(data){
                            alert(data);
                         //manipulate returned data here
                ));

                }
            });
我的php

function get_latest() {
    $stack = array(); 
    foreach($_POST as $key => $value) {
        $tmpRec = db_fetch_object(db_query('SELECT * FROM node_revisions WHERE nid = "%s"', $key));
        $arr = array($key => array('timestamp' => $tmpRec->timestamp, 'body' => $tmpRec->body));
        array_push($stack, $arr);   
    }

   echo '<pre>' . print_r($stack,1) . '</pre>'; //works and comes up in alert
    echo json_encode($stack); //Shows nothing


}
函数get_latest(){ $stack=array(); foreach($\发布为$key=>$value){ $tmpRec=db_fetch_对象(db_查询('SELECT*FROM node_revisions,其中nid=“%s]”,$key)); $arr=array($key=>array('timestamp'=>$tmpRec->timestamp,'body'=>$tmpRec->body)); 阵列推送($stack,$arr); } 回显“”。打印($stack,1)。“”;//工作并发出警报 echo json_encode($stack);//不显示任何内容 }
还有别的办法吗?我需要服务器以我可以在javascript中操作的格式将数据发送回。

这里的注释中要求的是使用PDO的参数化查询示例

$sql=new PDO("mysql:host=127.0.0.1;dbname=name","user","password");
让我们一行一行地看一下

$query="Select * from Northwind where Id=:ID;
$sql成为一个新的PDO对象(PDO可以支持多种类型的数据库(在本例中,我们使用的是MYSQL)

注意:我们提供的不是Northwind表中的实际Id,而是“:Id.”

$stmt->bindParam(':ID',$random_Id);
有趣的是,prepare语句将我们的查询字符串发送到sql server。此时,服务器知道我们将运行的sql命令,但还不知道变量的值

$stmt->execute(); 
$dr=$stmt->fetch();
bindParam然后发送$random_Id的值来替换“:Id.”

+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| Id     | int         | NO   | PRI | NULL    |       |    
| Name   | varchar(10) | NO   | UNI | NULL    |       |
| Passwd | varchar(50) | NO   |     | NULL    |       |
| Salt   | varchar(50) | NO   | UNI | NULL    |       |
+--------+-------------+------+-----+---------+-------+
然后执行我们的查询,并将结果放入$dr中。您可以从$dr中获取数据,就像从哈希表中获取数据一样。因此,假设northwind表如下所示:

$userName=$dr['Name'];


$sql=null;
for($i=0;$i<=6;$i++)
{
 $stmt->bindParam(':ID',$i);
 $stmt->execute;
}
我们需要'Name'的值。我们可以键入如下内容:

$userName=$dr['Name'];


$sql=null;
for($i=0;$i<=6;$i++)
{
 $stmt->bindParam(':ID',$i);
 $stmt->execute;
}
此行将销毁PDO对象,将其从内存中释放并关闭数据库连接

这样做SQL有两个优点。第一个是速度。如果您需要运行上面的查询,我不知道6次,使用6个不同的ID,您可以在prepare语句之后执行以下操作:

for($i=0;$ibindParam(':ID',$i);
$stmt->execute;
}
服务器已经有了主查询,所以我们只发送更改的内容。如果我们这样做来插入许多记录,这将比将整个查询放入循环快得多


第二个好处是它使SQL注入变得不可能(这是我使用它的主要原因)。

告诉我们
var_dump($stack);
Please应该可以工作。你确定JSON编码可以工作吗?最后一行试试:
如果(!function_exists('JSON_encode')echo“没有可用的JSON函数!”;否则echo($JSON=JSON_encode($stack))?$json:json_last_error();
2件事;url的值是多少?其次,您的代码容易受到SQL注入的攻击。我会认真研究使用参数化查询来保存自己未来的头像没有json函数可用!另外,使用
array_push()
向数组中添加一个值是毫无意义和低效的,您还通过向不必要的变量
$arr
分配一个值来增加开销。请改用
$stack[]=array(…);