0

AJAX呼び出しを介してデータベースから複数行のデータを返そうとしています。1つの行を正常に返しますが、複数の行を使用すると、データを正常に取得してもエラーが発生します。私はそれをサーバー側の問題に絞り込みました。これはおそらく私のPHPにあります。これが私が使用しているPHP関数です:

    public function get_case_studies($conn) {

    $v_sql_str = <<< END_SQL
        SELECT 
            name,
            title,
            content,
            location
        FROM case_studies
        WHERE is_active_flag = 1 AND is_deleted_flag = 0  
    END_SQL;

    try {
        $sth = $conn->prepare($v_sql_str);
        $sth->execute();
        }
        catch (PDOException $e) {
            $v_errormsg=$e->getMessage();
            return <<< END_HD
            {   
                "status":"FAIL" ,
                "error": "db_exception: Could not select case studies from database",
                "errorno": "1003" ,
                "errortype":  "SYS",
                "usermsg": "SQL=$v_sql_str, Error = $v_errormsg"
            }
    END_HD;
    }

    $v_json = "\"data\" : [";
    $n=0;
    $v_QT="\"";         
    while ($result = $sth->fetch(PDO::FETCH_OBJ)) {

        if ($n > 0) { $v_json = $v_json . ",";};
        $v_flags = "";

        $v_json = $v_json . "{ "
        . $v_QT .   "name" .                    $v_QT . ":" .       $v_QT . $result->name .                                 $v_QT . "," 
        . $v_QT .   "title" .                   $v_QT . ":" .       $v_QT . $result->title .                                $v_QT . ","
        . $v_QT .   "content" .                 $v_QT . ":" .       $v_QT . base64_decode($result->content) .               $v_QT . ","
        . $v_QT .   "location" .                $v_QT . ":" .       $v_QT . $result->location .                             $v_QT 
        . "}" ;
        $n++;
    }
    $v_json = $v_json . "] ";

    $sth->closeCursor();

    $v_json1 = "{ \"status\" : \"OK\", " . $v_json . " }";
    return $v_json1;

}

これが私のAJAX呼び出しです:

            $.ajax({
            type: "POST",
            url: "ajax.php",
            data: { module: "case_studies.php", action: "get_case_studies" }, 
            success: function(json_data) {
                ui_case_studies.case_list = json_data.data;
                alert(JSON.stringify(json_data.data));
            },
            error: function (a, b, c) {
                console.log(JSON.stringify(a));
                alert("Something went wrong while retreiving the case studies, please contact your database administrator.");
                //alert(JSON.stringify(a));
                //alert(b);
                //alert(c);
            }
        });
4

1 に答える 1

1

json_encodeJSONを作成するときに使用することをお勧めします。また、パーツで返されたデータを正しく解析しているかどうかも確認してくださいAjax' onSuccess

PHPの部分:

$result = array(); 
$i = 0;

while ($result = $sth->fetch(PDO::FETCH_OBJ)) {
    $result[$i]['name'] = $result->name;
    $result[$i]['title'] = $result->title;
    $result[$i]['content'] = base64_decode($result->content);
    $result[$i]['location'] = $result->location;
    $i++;
}

return json_encode($result);

JSパート:

new Ajax.Request(url,
{
    method: 'post',
    onSuccess: function(transport) 
    {
        var response = transport.responseText || false;

        if (response !== false) {
            var result = JSON.parse(response);

            alert(result[1]['name']); // etc.
        }
    }
});

編集:

追加情報は提供しません。エラーがありますが、役立つ答えではありません。だから、ここにデバッグするときにあなたを助けるかもしれないいくつかのものがあります。

PHP応答形式:

[
  {
    "name": "name0",
    "title": "title0",
    "content": "content0",
    "location": "location0"
  },
  {
    "name": "name1",
    "title": "title1",
    "content": "content1",
    "location": "location1"
  },
  {
    "name": "name2",
    "title": "title2",
    "content": "content2",
    "location": "location2"
  }
]

解析:

var response = '[{"name":"name0","title":"title0","content":"content0","location":"location0"},{"name":"name1","title":"title1","content":"content1","location":"location1"},{"name":"name2","title":"title2","content":"content2","location":"location2"}]';
var result = JSON.parse(response);

alert(result[1]['name']);
于 2013-02-27T09:29:09.320 に答える