0

以下の成功コールバック関数をどのようにコーディングして、以下の返された JSON 内のオブジェクトにアクセスできるようにしますか。明らかに、返されたオブジェクトに、を使用してアクセスできなくなりますsuccess: function(data) {if (data.returned === true) {。どうすればこれを達成できますか?

jQuery コード:

$("#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) {
                            $("#resultProjects").html(JSON.stringify(data.Projects));
                            $("#resultScreenshots").html(JSON.stringify(data.Screenshots));

                            $("#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);
                                });
                            });
                        }
                    }
                });
            });

返された JSON:

{
    "Projects": [
        {
            "projectId": "932713684f9073189ec7b",
            "projectName": "Cloud859Collective",
            "startDate": "April 19th, 2012",
            "finishedDate": "April 25th, 2012",
            "createdFor": "ClasskCreations",
            "contributors": "Mike Grigsby",
            "projectDesc": "This website was created with a friend in mind. His name is Kevin Johnson and he is a rapper. He needed a website that would allow him to host and share his music."
        },
        {
            "projectId": "10599012654f907093714e9",
            "projectName": "Nurbell Studio",
            "startDate": "April 15th, 2012",
            "finishedDate": "April 19th, 2012",
            "createdFor": "Nurbell LLC",
            "contributors": "Mike Grigsby",
            "projectDesc": "This is the page you are currently looking at. This is the official Nurbell homepage. Complete with a frontend and a backend."
        }
    ],
    "Screenshots": [
        {
            "screenshotURI": "http://nurbell.com/vd/1.0/images/project-data/kevo.png"
        },
        {
            "screenshotURI": "http://nurbell.com/vd/1.0/images/project-data/nurbell.png"
        }
    ]
}
4

2 に答える 2

2

ここで何を尋ねているのかわかりません。JavaScriptネームスペースを見てみる必要があると思います。そうすれば、オブジェクト (または名前空間) にプロパティを作成し、json の結果をそのプロパティに入れることができます。

このようなもの:

 var myProjects = {
     projects: null,

     getProjects: function() {
           // do the ajax thing with something like
           myProjects.projects = data.projects;
     },

     placeProjects: function() {
           if (myProjects.projects == null) myProjects.getProjects();
           $.each(myProjects.projects, function(i,e){
                //place project content
           }
     },
 }

 // define the click event
 $("#projects").click(myProjects.placeProjects());

データは、削除するかページをリロードするまで保存されます。このオブジェクトは、firebug の DOM インスペクターで確認できます。それが役立つことを願っています

編集 :

この jsFiddle http://jsfiddle.net/BTbJu/5でアイデアを実装しました。 それを実行し、Div 内のテキストをクリックして最初のプロジェクトを読み込みます。クリックし続けると回転します。

于 2012-07-14T20:36:34.523 に答える
0

問題を正しく理解しているかどうかはわかりませんが、JSON.stringify を呼び出すと元の json が完全に変更されるのではないかと懸念しているようです。

いいえ、JSON.Stringify は新しい文字列を返します。クロージャー引数 'data' によって参照される元の json はそのまま残ります。データ参照を介してすべてのプロパティに非常によくアクセスできます。

実際、data.projectId はクロージャー スコープ内で間違っているため、未定義と評価されるはずです。

これを試して:

$("#projects").click(function () {
    jQuery.ajax({
        type: "POST",
        dataType: "JSON",
        url: "<?=base_url()?>index.php/home/projectsSlider",
        success: function (data) {
            var projects = data.Projects; //array
            var screenshots = data.Screenshots; //array

            //direct, one-off indexed
            console.log(projects[0].projectId);
            console.log(data.Projects[0].projectId);

            //looped with map
            projects.map(function(project, index) {
                console.log(project.projectId);
            });

            //traditional for
            for(var i1 = 0; i1 < projects.length; i1++) {
                console.log(projects[i1]);
            }

            //direct, one-off indexed
            console.log(screenshots[0].screenshotURI);
            console.log(data.Screenshots[0].screenshotURI);

            //looped
            screenshots.map(function(screenshot, index) {
                console.log(screenshot.screenshotURI);
            });

            if (data.returned === true) {
                //your stringify code etc.
            }
        }
    });
});
于 2012-07-14T20:33:40.663 に答える