1

何らかの理由で、.done()AJAX 呼び出しが成功した後に関数が起動しません。これは Javascript ファイルです。

//Create groups
$("#compareschedulesgroups_div").on('click', '.compareschedules_groups', function() { //When <li> is clicked
    //Get friendids and friend names
    print_loadingicon("studentnames_taglist_loadingicon");
    $.ajax({
        type: "POST", //POST data
        url: "../secure/process_getgroupdata.php", //Secure schedule search PHP file
        data: { groupid: $(this).find(".compareschedules_groups_groupnum").val() }, //Send tags and group name
        dataType: "JSON" //Set datatype as JSON to send back params to AJAX function
    })
    .done(function(param) { //Param- variable returned by PHP file
        end_loadingicon("studentnames_taglist_loadingicon");
        //Do something
    }); 
});

Safari の [Web 開発] タブには、私の外部 PHP ファイルがこれを返したと表示されています。これは正しいデータです。

{"student_id":68,"student_name":"Jon Smith"}{"student_id":35,"student_name":"Jon Doe"}{"student_id":65,"student_name":"Jim Tim"}{"student_id":60,"student_name":"Jonny Smith"}

PHPファイルはこんな感じ。基本的に、json_encoded 値を取得し、Content-Type ヘッダーをエコーし​​てから、json_encoded 値をエコーし​​ます。

    for ($i = 0; $i<count($somearray); $i++) {
        $jsonstring.=json_encode($somearray[$i]->getjsondata());
    }

    header("Content-Type: application/json", true);
    echo $jsonstring;

編集:私はオブジェクトの配列を持っています-これはjson_encodingを行う方法ですか?

別のスタック オーバーフローの質問からの getjsondata 関数は次のとおりです。

    public function getjsondata() {
        $var = get_object_vars($this);
        foreach($var as &$value){
           if(is_object($value) && method_exists($value,'getjsondata')){
              $value = $value->getjsondata();
           }
        }
        return $var;
    }
4

1 に答える 1

2

呼び出しをループしてjson_encode()、個々のオブジェクトを出力しています。これらが連結されている場合、これは無効な JSON です。解決策は、各オブジェクトを配列に追加してから、最終的な配列をエンコードすることです。PHP を次のように変更します。

$arr = array();

for ($i = 0; $i<count($somearray); $i++) {
    $arr[] = $somearray[$i]->getjsondata();
}

header("Content-Type: application/json", true);
echo json_encode($arr);

これにより、オブジェクトの配列の JSON 表現が出力されます。次に例を示します。

[
    {
        "student_id": 68,
        "student_name": "Jon Smith"
    },
    {
        "student_id": 35,
        "student_name": "Jon Doe"
    },
    {
        "student_id": 65,
        "student_name": "Jim Tim"
    },
    {
        "student_id": 60,
        "student_name": "Jonny Smith"
    }
]
于 2013-10-22T16:21:36.200 に答える