【问题标题】:Ajax success jquery phpajax成功jquery php
【发布时间】:2015-02-27 11:16:14
【问题描述】:
[{ 
    "SchoolId": "015-08-0034-009-37",
    "SubjectId": "08-0034-00613",
    "StudentId": "T-15981",
    "StudentName": "John"
},{
    "SchoolId": "015-08-0034-009-37",
    "SubjectId": "08-0034-00613",
    "StudentId": "T-15982",
    "StudentName": "Paul"
}]

这是我的 php 页面的 json_encode 响应,当我回显时,如果看起来像这样

Schoolid=015-08-0034-009-37
Subjectid=08-0034-00613
Studentid=T-15981
Studentname=John
Schoolid=015-08-0034-009-37
Subjectid=08-0034-00613
Studentid=T-15982
Studentname=Paul

我可以通过这样做得到这个结果

for (var i = 0; i < data.length; i++) {
    console.log(data[i].schoolid);
    console.log(data[i].subjectid);
    console.log(data[i].studentid);
    console.log(data[i].studentname);
}

我怎样才能使同一条目的值只生成一次,就像 school idsubject id 的值将只显示一次像 student idstudent name 这样的唯一值将显示两次,因为它有两个不同的值。

我希望得到结果

Schoolid=015-08-0034-009-37
Subjectid=08-0034-00613

Studentid=T-15981
Studentname=John
Studentid=T-15982
Studentname=Paul

在传递 json_encode 之前,我应该在 php 中的哪里修复这个问题,或者在从 php 接收到 json_encode 之后在 ajax 中进行修复?

if ($stmt - > rowCount() > 0) {
    while ($selected_row = $stmt - > fetch(PDO::FETCH_ASSOC)) {
        $basicinfo[] = array('schoolid' => $selected_row['schoolid'], 'subjectid' => $selected_row['subjectid'], 'studentid' => $selected_row['studentid'], 'studentname' => $selected_row['studentname']);
        //$basicinfo1[] = array('schoolid' => $selected_row['schoolid'], 'subjectid' => $selected_row['subjectid']);
        //$basicinfo2[] = array('studentid' => $selected_row['studentid'], 'studentname' => $selected_row['studentname']);
    }
    //$merge = array_merge($basicinfo1 , $basicinfo2);
    //$add = $basicinfo1 + $basicinfo2)
    //$input = array_map("unserialize", array_unique(array_map("serialize", $merge)));
    $input = array_map("unserialize", array_unique(array_map("serialize", $basicinfo)));
    echo json_encode($input, JSON_UNESCAPED_UNICODE);
}

【问题讨论】:

  • 如果您除了显示值之外没有做任何事情,那么最好在 PHP 中进行更改
  • @Lepanto 我将该值放入输入框中,所以是的,只是显示如何?我试过merge array+ array 但我没有得到正确的回应
  • 我留下了我尝试过的评论..
  • 我知道你的意思,你想对你的数据进行排序。那么你应该修复你的php。我不知道是否有任何 php 脚本可以做到这一点。这个想法有一些问题。您应该告诉脚本您希望如何连接数据,因为您可能会连接错误的数据。其他人如何做到这一点?好吧,我认为他们通常会使用更多查询来构建数据。
  • @luka 所以没有其他选择,只能在查询中进行修复..感谢您的想法

标签: php jquery mysql ajax json


【解决方案1】:

以下代码将帮助您修复 PHP 中的数组

if ($stmt - > rowCount() > 0) {
    //$new_data = array();
    while ($v = $stmt - > fetch(PDO::FETCH_ASSOC)) {
        $tmp_key = $v['SchoolId'].'-'.$v['SubjectId']; //adding a temp key

        $new_data[$tmp_key]['SchoolId'] = $v['SchoolId'];
        $new_data[$tmp_key]['SubjectId'] = $v['SubjectId'];

        $sudky = (isset($new_data[$tmp_key]['Student'])) ? count($new_data[$tmp_key]['Student']) : 0; //getting the key for student child array
        $new_data[$tmp_key]['Student'][$sudky]['StudentId'] = $v['StudentId'];
        $new_data[$tmp_key]['Student'][$sudky]['StudentName'] = $v['StudentName'];
    }
    $new_data = array_values($new_data);
    echo json_encode($new_data, JSON_UNESCAPED_UNICODE);
}

最终的 JSON 数据如下所示

[{
    "SchoolId":"015-08-0034-009-37",
    "SubjectId":"08-0034-00613",
    "Student":[
        {"StudentId":"T-15981","StudentName":"John"},
        {"StudentId":"T-15982","StudentName":"Paul"}
    ]
}]

在 Javascript 中,您必须在 for 循环中添加另一个循环,您已经拥有该循环通过 Student 数据

以下是 Javascript 部分

<script>
$(document).ready(function($){
    $.ajax({
        type: "post",
        url: "YOURSCRIPT",
        dataType: "json",
        success: function(data){
            if(data!=''){
                for (var i = 0; i < data.length; i++) {
                    alert(data[i].SchoolId);
                    alert(data[i].SubjectId);
                    var student = data[i].Student;
                    for (var j = 0; j < student.length; j++) {
                        alert(student[j].StudentId);
                        alert(student[j].StudentName);
                    }
                }
            }
        }
    });
});
</script>

【讨论】:

  • 我在$sudky = count($new_data[$tmp_key]['Student']); //getting the key for student child arrayStudent 中得到未定义的索引,Student 来自哪里
  • 我也有这个警告You should use only: 1 assignment(s) (2 used) to a variable: 在行$new_data = array();
  • 很酷,我可以得到你正在显示的结果,但是我在 jquery 中显示它时遇到问题,你能告诉我如何获取学生 ID 的值吗?从成功我得到像这样的其他数据的价值for (var i = 0; i &lt; data.length; i++) { console.log(data.[i].SchoolId); console.log(data.[i].SubjectId); } 如何获得学生姓名?
  • 我也添加了javascript jquery代码,检查一下
  • 先生,我有 dup 值,我该如何删除 dup 值。示例 8 学生证?
猜你喜欢
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2010-12-06
  • 2016-04-20
  • 2014-03-07
  • 2013-01-14
  • 1970-01-01
相关资源
最近更新 更多