0

返された複数の mysql 行を json を介して以下の jquery スクリプトに渡すにはどうすればよいですか? 私がこれまでに書いたコードでは、2つ以上を渡したときにjqueryの成功コールバック関数を実行できません。これを達成するにはどうすればよいですか?

jQuery、JS コード:

$("#projects").click(function() {
    jQuery.ajax({ type: "POST", dataType: "JSON",
        url: "<?=base_url()?>index.php/home/projectsSlider",
        json: {returned: true}, success: function(data) {
            if (data.returned === true) {
                $("#content").fadeOut(150, function() {                             
                    $(this).replaceWith(projectsSlider(data.projectId, data.projectName, data.startDate, data.finishedDate, data.projectDesc, data.createdFor, data.contributors, data.screenshotURI, data.websiteURL), function() {
                        $(this).fadeIn(150);
                    });
                });
            }
        }
    });
});

PHP コード:

function projectsSlider() {
    $query  = $this->db->query("SELECT * FROM projects ORDER BY idprojects DESC");
    foreach ($query->result() as $row) {
        $projectId = $row->projectId;
        $projectName = $row->projectName;
        $startDate = $row->startDate;
        $finishedDate = $row->finishedDate;
        $createdFor = $row->createdFor;
        $contributors = $row->contributors;
        $projectDesc = $row->projectDesc;
        echo json_encode(array('returned' => true,
            'projectId' => $projectId,
            'projectName' => $projectName,
            'startDate' => $startDate,
            'finishedDate' => $finishedDate,
            'projectDesc' => $projectDesc,
            'createdFor' => $createdFor,
            'contributors' => $contributors));
    }
    $query1 = $this->db->query("SELECT * FROM screenshots s WHERE s.projectId = '{$projectId}' ORDER BY s.idscreenshot DESC");
    foreach ($query1->result() as $row2) {
        $screenshotURI = $row2->screenshotURI;
        $websiteURL = $row->websiteURL;
        echo json_encode(array('screenshotURI' => $screenshotURI,'websiteURL' => $websiteURL));
    }
}
4

2 に答える 2

2

2 つの異なる JSON 文字列をエコーし​​ています。これは有効な JSON ではありません。したがって (私はテストしていませんが)、ajax 呼び出しは失敗します。

2 つの JSON をマージして、「projectsSlider()」関数から有効な JSON を 1 つだけ返すことをお勧めします。そのようです:

$projectArray = $this->getProjectsRowSet();
$screenshotsArray = $this->getScreenshotsRowSet();
$combinedArray = array_merge(array("Projects" =>$projectArray),array("Screenshots" =>$screenshotsArray));
echo json_encode($combinedArray);

次に、「data.Projects」と「data.Screenshots」を使用して、ajax コールバック メソッド内から各行セットにアクセスします。そのようです:

$("#resultProjects").html(JSON.stringify(data.Projects));
$("#resultScreenshots").html(JSON.stringify(data.Screenshots));
于 2012-07-12T01:24:32.610 に答える
1

有効な JSON 文字列は基本的に、JS コードのブロック内の割り当てステートメントの右側です。foreach() ループ内で複数の独立した JSON 文字列を生成しており、基本的に次のようなものを生成しています

var x = 1; 2; 3; 4; 5; 6;

これは完全な構文エラーです。解析できない json を生成しています。

ループは単一のモノリシック PHP データ構造を構築する必要があり、ループが終了した後に json_encode します。

$data = array();
foreach($query1->result() as $row2) {
   $data[] = array($row2->screenshotURI, $row->websiteURL);
}
echo json_encode($data);
于 2012-07-10T23:52:14.433 に答える