我正在使用qTip jQuery插件生成动态工具提示。我在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'
}
}
});
});
});
我出错的任何想法?我试了几天很多东西,我找不到问题。
非常感谢!
答案 0 :(得分:1)
在“位置”括号关闭后,javascript底部会有一个额外的括号。
答案 1 :(得分:1)
为console.log(arguments)
函数的第一行(beforeContentUpdate
之前)执行eval
,以确保内容arg符合您的预期?
答案 2 :(得分: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'
}
}
});
});
});
答案 3 :(得分:1)
将var json = eval('(' + content + ')');
更改为var json = eval(content);
和html: json.TNAME
到html: json.COLUMNS.TNAME
答案 4 :(得分:0)
事实证明,它是ColdFusion调试器导致ajax变得奇怪。我很久以前就发现了这一点,但现在才重新审视这个问题。当遇到这种性质的错误时,应该做的第一件事是关闭CF调试器以检查它是否导致问题。