Question

J'utilise le plugin jQuery Qtip pour générer une info-bulle dynamique. Je reçois une erreur dans mon JS, et je ne suis pas sûr si sa source est le JSON ou la JS. L'infobulle appelle la fonction suivante: (désolé pour tout ce code, mais il est nécessaire)

<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>

Cette fonction retourne le JSON suivant:

{
    "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"
        ]
    ]
}

Le problème que je vais avoir est à chaque fois que je tente de joindre le JSON à la #catalog couche, je reçois une erreur de syntaxe qui dit « manque parenthétique. » Ceci est le code JavaScript J'utilise:

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

Toutes les idées où je vais mal? J'ai essayé beaucoup de choses pendant plusieurs jours et je ne trouve pas la question.

Merci!

Était-ce utile?

La solution 5

Il se trouve, il est le débogueur ColdFusion provoquant l'Ajax pour aller bizarre. J'ai trouvé ce il y a longtemps, mais seulement revisité la question maintenant. La première chose que doit faire, en cas d'erreur de cette nature est d'arrêt du débogueur CF pour vérifier si elle est à l'origine du problème.

Autres conseils

il y a un support supplémentaire au fond de votre javascript, après la parenthèse « de position » est fermée.

Faites un console.log(arguments) pour la première ligne de la fonction beforeContentUpdate (avant le eval), pour vous assurer que le contenu arg est ce que vous attendez est d'être?

Il semble que beforeContentUpdate ne fonctionne pas. Je suggère donc d'utiliser le rappel de 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'
                }
            }
        });
    });
});

Changement var json = eval('(' + content + ')'); à var json = eval(content); et html: json.TNAME à html: json.COLUMNS.TNAME

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top