【问题标题】:Can't return json array from PHP to jQuery AJAX无法将 json 数组从 PHP 返回到 jQuery AJAX
【发布时间】:2014-12-10 07:14:47
【问题描述】:

问题
我正在使用带有下拉列表的 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 中读取这个

请注意,我使用的表位于 project_id、member_email 级别

【问题讨论】:

  • 尝试 console.log(data) 成功

标签: php jquery ajax json


【解决方案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);
        }
    }
});

【讨论】:

  • 这工作正常。当我尝试返回另一个具有相同项目 ID 和主管的成员电子邮件数组时,问题就出现了。我不知道如何用相同的回声返回数组 $row_1。请检查我问题的最后几行。
  • 我明白了,您刚刚将$row_1 添加到现有数组中。您不能以这种方式发送。请参阅我的更新答案。
  • @user3804483 是 $row_1 一个数组还是单个值?似乎它是一个数组,您需要像使用其他元素一样将其作为 key=>value 引用。
  • $row_1 是一个包含成员电子邮件的数组。假设一个特定项目中有 4 个成员。我需要他们所有的电子邮件,但我无法事先知道会有多少成员。有没有办法在 php 中为 jQuery 编写一个循环来从数组中获取所有值作为同一个 echo 的一部分?
  • 您必须在 javascript 中执行循环。
【解决方案2】:

我不确定你的问题是否正确。但是您希望将 $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' 来获得更简洁的方法,而且它似乎也更容易。

请告诉我我推荐的代码是否有效。如果不是,请告诉我随之而来的错误。

【讨论】:

  • 谢谢,知道了。在 php 中添加了一个循环来获取 jquery 中数组中的成员。
【解决方案3】:

当你做一个console.log(obj);时你得到你想要的吗? ?

因为里面没有“project_name” 你的 SQL 选择

关于 jQuery .. 试过 $.each 吗?

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

【讨论】:

  • 会尽力让你知道
猜你喜欢
  • 2017-08-26
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2011-01-25
相关资源
最近更新 更多