jsonをcffuctionで返すと層に追加するとエラーが発生します
-
24-10-2019 - |
質問
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'
}
}
});
});
});
私が間違っている場所はありますか?私は数日間多くのことを試しましたが、問題が見つかりません。
どうもありがとう!
解決 5
結局のところ、それはコールドフュージョンデバッガーであり、Ajaxがすべて奇妙になります。私はこれをずっと前に見つけましたが、今で問題を再訪しました。この性質のエラーに遭遇したときに最初にすべきことは、CFデバッガーが問題を引き起こしているかどうかを確認することです。
他のヒント
「位置」ブラケットが閉じた後、JavaScriptの下部に追加のブラケットがあります。
a console.log(arguments)
の最初の行 beforeContentUpdate
関数(以前 eval
)、コンテンツのargがあなたが期待するものであることを確認するために?
のようだ 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'
}
}
});
});
});
変化する var json = eval('(' + content + ')');
に var json = eval(content);
と html: json.TNAME
に html: json.COLUMNS.TNAME