将PHP中的多个重复键返回给json AJAX响应

时间:2016-04-23 11:09:37

标签: php jquery json ajax get

非常适合PHP,但与jQuery斗争。 我有一个用于编辑项目的bootstrap模式,我在点击编辑按钮时使用AJAX填充字段。这很好用,但项目可以在多个部门(模态中的复选框)

这就是我填充模式的方式:

$.ajax({
url: 'project_tasks.php?task=select_project&pjct_id=' + id,
method: 'GET',
dataType: 'json'
}).success(function(response) {
// Populate the form fields with the data returned from server
$('#edit_project')
    .find('[name="project_id"]').val(response.project_id).end()
    .find('[name="project_title"]').val(response.project_title).end()
    .find('[name="project_bgcolor"]').val(response.project_bgcolor).end()
    .find('[name="project_desc"]').val(response.project_desc).end()
    .find(':checkbox[name^="department"]').each(function () {
    if($(this).val() ==  response.dpmt_id) {
        console.log("depart: " + response.dpmt_id);
        $(this).prop('checked', true);
        }
    });
});

PHP是(还没有逃避,但会做):

    $pjct_id = $_GET['pjct_id'];
    $pjct = Projects::find_by_id($pjct_id);

    $dpmts = Projects_departments::find_all_by_pjct_id($pjct_id);
    foreach ($dpmts as $dpmt) {
        $response_array['dpmt'] = $dpmt->department_id;
    }
    $response_array['project_id'] .= $pjct->id;
    $response_array['project_title'] .= $pjct->project_title;
    $response_array['project_bgcolor'] .= $pjct->project_bgcolor;
    $response_array['project_desc'] .= $pjct->project_desc;
    echo json_encode($response_array);

显然我知道' dpmt'每次都被覆盖,所以我只得到json dpmt : 1而不是每个部门ID,但是我希望得到像dpmt: 1, dpmt: 2, dpmt: 3这样的东西,然后通过它来勾选复选框。

希望我能够很好地解释自己(妻子正在把我赶出去) 提前谢谢。

1 个答案:

答案 0 :(得分:0)

PHP:返回一个id数组而不是整数/字符串。

...
foreach ($dpmts as $dpmt) {
    $response_array['dpmt'][] = $dpmt->department_id;
}
...

Javascript:使用组合选择器,因此您不必循环每个复选框。仅在PHP返回的dpmt_ids上使用循环。

$('#edit_project')
    .find('[name="project_id"]').val(response.project_id).end()
    .find('[name="project_title"]').val(response.project_title).end()
    .find('[name="project_bgcolor"]').val(response.project_bgcolor).end()
    .find('[name="project_desc"]').val(response.project_desc).end()
;
for (i=0; i< response.dpmt_id.length; ++i) {
     $('#edit_project').find(':checkbox[name="department[]"][value="'+response.dpmt_id[i]+'"]').prop('checked',true);
}