我有一个CFC通过AJAX执行查询,以获取要在我的页面上显示的图像信息/路径列表。在我的表中,我有一个布尔列main
来指示图像是否是主图像,因此显示在所有其他图像之上。
由于我是通过AJAX访问查询结果,因此我需要创建一个数据数组,然后将其返回到我的javascript函数循环返回数据并构造<img>
标记的页面。
如何让我的CFC或我的javascript循环识别main
布尔值并将该图像移动到第一个位置以显示在我的页面上?
这是我的CFC:
<cfquery name="project_images">
select path, title, alt, main from tbl_images where pid = #projects.pid#;
</cfquery>
<cfloop query="project_images">
<cfset imgStruct = structNew()>
<cfset imgStruct["path"] = path>
<cfset imgStruct["alt"] = alt>
<cfset imgStruct["title"] = title>
<cfset imgStruct["main"] = main>
<cfset ArrayAppend(imgArray, imgStruct)>
</cfloop>
<cfset local.response["images"] = #imgArray#>
<cfreturn local.response>
我的jQuery功能:
$('.project_class').click(function(e){
e.preventDefault();
var theclass = $(this).attr('id');
var cat = 'planning';
$.getJSON("../cfc/projects.cfc?returnFormat=json&method=getProjects",
{"theclass":theclass, "cat":cat},
function(response){
$('#portfolio_item').html(response.html);
var imageData = response.images;
$.each(imageData, function(i, item) {
$('#portfolio_item').append('<img src="..' + item.path + '" />');
});
});
});
答案 0 :(得分:3)
一个选项是对SQL中的图像进行排序。使用CASE
语句为main
记录分配比其他记录更高的排序顺序。
SELECT CASE WHEN main = 1 THEN 0 ELSE 1 END AS SortNum
, path
, title
, alt
, main
FROM tbl_images
WHERE pid = <cfqueryparam value="#projects.pid#" cfsqltype="cf_sql_integer">
ORDER BY SortNum
或者您可以检查循环中的main
标记,并在标记为true时使用arrayPrepend
而不是arrayAppend
。