0

qTipjQueryプラグインを使用して動的なツールチップを生成しています。JSでエラーが発生しましたが、そのソースがJSONなのかJSなのかわかりません。ツールチップは次の関数を呼び出します:(このコードはすべて申し訳ありませんが、必要です)

<cffunction 
name="fGameDetails"
access="remote"
returnType="any"
returnformat="JSON"
output="false"
hint="This grabs game details for the games.cfm page">
    <!---Argument, which is the game ID--->
<cfargument 
    name="gameID"
    type="numeric"
    required="true"
    hint="CFC will look for GameID and retrieve its details">
<!---Local var--->
<cfset var qGameDetails = "">
<!---Database query--->
<cfquery name="qGameDetails" datasource="#REQUEST.datasource#">
SELECT
    titles.titleName AS tName,
    titles.titleBrief AS tBrief,
    games.gameID,
    games.titleID,
    games.releaseDate AS rDate,
    genres.genreName AS gName,
    platforms.platformAbbr AS pAbbr,
    platforms.platformName AS pName,
    creviews.cReviewScore AS rScore,
    ratings.ratingName AS rName
FROM
    games
        Inner Join platforms ON platforms.platformID = games.platformID
        Inner Join titles ON titles.titleID = games.titleID
        Inner Join genres ON genres.genreID = games.genreID
        Inner Join creviews ON games.gameID = creviews.gameID
        Inner Join ratings ON ratings.ratingID = games.ratingID
WHERE 
    (games.gameID = #ARGUMENTS.gameID#);
</cfquery>
<cfreturn qGameDetails>
</cffunction>

この関数は次のJSONを返します。

{
    "COLUMNS": [
        "TNAME",
        "TBRIEF",
        "GAMEID",
        "TITLEID",
        "RDATE",
        "GNAME",
        "PABBR",
        "PNAME",
        "RSCORE",
        "RNAME"
    ],
    "DATA": [
        [
            "Dark Void",
            "Ancient gods known as 'The Watchers,' once banished from our world by superhuman Adepts, have returned with a vengeance.",
            154,
            54,
            "January, 19 2010 00:00:00",
            "Action & Adventure",
            "PS3",
            "Playstation 3",
            3.3,
            "14 Anos"
        ]
    ]
}

私が抱えている問題は、JSONをレイヤー#catalogに追加しようとするたびに、「括弧がありません」という構文エラーが発生することです。これは私が使用しているJavaScriptです:

$(document).ready(function() 
{
    $('#catalog a[href]').each(function()
    {
        $(this).qtip( {
            content: {
            url: '/gamezilla/resources/components/viewgames.cfc?method=fGameDetails',
            data: { gameID: $(this).attr('href').match(/gameID=([0-9]+)$/)[1] },
            method: 'get'
        },
        api: {
            beforeContentUpdate: function(content) {
            var json = eval('(' + content + ')');
            content = $('<div />').append(
                $('<h1 />', {
                    html: json.TNAME
                }));
            return content;
            }
        },
        style: {
            width: 300,
            height: 300,
            padding: 0,
            name: 'light',
            tip: {
                corner: 'leftMiddle',
                size: {
                    x: 40,
                    y : 40
                }
            }
        },
        position: {
            corner: {
                target: 'rightMiddle',
                tooltip: 'leftMiddle'
            }
        }
        });
    });
});

私が間違っているアイデアはありますか?数日間いろいろ試してみましたが、問題が見つかりません。

どうもありがとう!

4

5 に答える 5

1

「位置」ブラケットを閉じた後、JavaScriptの下部に余分なブラケットがあります。

于 2010-06-07T18:08:17.697 に答える
1

console.log(arguments)関数の最初の行beforeContentUpdate(の前)にaを実行evalして、コンテンツ引数が期待どおりであることを確認しますか?

于 2010-07-04T00:51:14.297 に答える
1

動作していないようbeforeContentUpdateです。だから私はコールバックを使用することをお勧めしonRenderます:

$(document).ready(function () {
    $('#catalog a[href]').each(function () {
        var link = $(this);
        $(this).qtip({
            content: 'loading...',
            api: {
                onRender: function () {
                    var self = this;
                    $.ajax({
                        url: '/gamezilla/resources/components/viewgames.cfc?method=fGameDetails',
                        dataType: 'json',
                        data: { gameID: link.attr('href').match(/gameID=([0-9]+)$/)[1] },
                        success: function (data) {
                            self.updateContent(data.DATA[0][0]);
                        }
                    });
                }
            },
            style: {
                width: 300,
                height: 300,
                padding: 0,
                name: 'light',
                tip: {
                    corner: 'leftMiddle',
                    size: {
                        x: 40,
                        y: 40
                    }
                }
            },
            position: {
                corner: {
                    target: 'rightMiddle',
                    tooltip: 'leftMiddle'
                }
            }
        });
    });
});
于 2010-07-05T14:02:40.753 に答える
1

に変更var json = eval('(' + content + ')');しますvar json = eval(content);html: json.TNAMEhtml: json.COLUMNS.TNAME

于 2010-07-06T06:03:14.847 に答える
0

結局のところ、ajaxがすべて奇妙になるのはColdFusionデバッガーです。私はずっと前にこれを見つけましたが、今は問題を再検討しただけです。この種のエラーが発生したときに最初にすべきことは、CFデバッガーをシャットオフして、問題の原因であるかどうかを確認することです。

于 2010-11-11T11:41:22.637 に答える