无法将json数组从PHP返回到jQuery AJAX

时间:2014-12-10 07:14:47

标签: php jquery ajax json

问题
我正在使用带有下拉列表的AJAX jQuery来从PHP获得一些响应。到目前为止,我只想从数据库中获取一行,但现在我需要另一个数组。

现状

前面 -

    $.ajax({
    type: "POST",    
    url: "project_details.php",    
    data: data_string,
    cache: false,
    success: function(data){
    if(data){
    var json = data;
    obj = JSON.parse(json);
    $("#project-name").text(obj.project_name);
    $("#start-date").text(obj.start_date);
    }
    }
    });

返回 -

$result=mysqli_query($db,"SELECT distinct project_name,start_date FROM `projects` WHERE a.supervisor_email = '$email' and a.project_id = '$project'"); 
$count=mysqli_num_rows($result);

$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

if($count==1){ 
echo json_encode(array("project_name" =>$row['project_name'],
"start_date" => $start->format("d M,Y"))); }

我想要什么 - 我需要从PHP返回的另一个数组 -

$result_1=mysqli_query($db,"SELECT member_email FROM `projects` WHERE a.supervisor_email
$email' and a.project_id = '$project'"); 

$row_1=mysqli_fetch_array($result,MYSQLI_ASSOC);

所以最终的回声应该是

if($count==1){ 
echo json_encode(array($row_1,"project_name" =>$row['project_name'],
"start_date" => $start->format("d M,Y"))); }

我无法弄清楚如何从jQuery中读取这个内容

请注意,表I使用的是在project_id,member_email级别

3 个答案:

答案 0 :(得分:1)

首先,将数据类型指定为json

这样你就不需要......

var json = data;
obj = JSON.parse(json);

..您可以直接使用数据变量。此外,根据您对AJAX数据的处理方式,最好使用.html()代替.text()

关于您的原始问题,我发现您已将$row_1添加到现有阵列,但它不会以这种方式工作。我不知道它包含什么,但似乎是一个数组。由于AJAX需要json格式,因此您需要key=>value对。这样怎么样?

PHP:

$json_arr = array();

while ($row_1=mysqli_fetch_array($result,MYSQLI_ASSOC)) {
    $email{'member_email'] = $row_1['member_email'];
}
if($count==1){ 
    echo json_encode(array("member_email" =>$email,
    "project_name" =>$row['project_name'],
    "start_date" => $start->format("d M,Y"))); 
}

AJAX:

$.ajax({
    type: "POST",    
    url: "project_details.php",    
    data: data_string,
    dataType: "json",
    cache: false,
    success: function(data){
        if(data){
            $("#member_email").text(data.member_email);
            $("#project-name").text(data.project_name);
            $("#start-date").text(data.start_date);
        }
    }
});

答案 1 :(得分:0)

当你做console.log(obj)时,你得到你想要的东西; ?

因为里面没有“project_name” 你的SQL-Select

关于jQuery ..试过$ .each?

$.each(obj, function(key, project)
{
    ...text(project.project_name);
});

答案 2 :(得分:0)

我不确定我的问题是否正确。但是你想让$ row_1作为额外的阵列得到回应,我是对的吗?如果是这样,试试这个:

PHP

echo json_encode( array(
                 "row_1" => $row_1,
                 "project_name" =>$row['project_name'],
                 "start_date" => $start->format("d M,Y")
               )
);

然后在$ .ajax上 使用data.row_1,data.project_name,data.start_date来引用您的编码值

注意:我还想推荐@EternalHour说你应该使用dataType:'json'来代替更清洁的方法,而且它似乎也更容易。

请告诉我推荐的代码是否有效。如果没有,请你告诉我它带来的错误。