【发布时间】:2021-06-24 02:26:25
【问题描述】:
在模式中填充有关文件的数据后,我正在尝试删除图像文件。
我的 jQuery 看起来像这样:
const deleteMedia = () => {
const url = '../../includes/delete-media.cfc?method=deleteMedia';
$(document).on('click', '.confirm-delete', () => {
const fileName = $('.modal-wrapper').find('.file-name').text();
$.ajax({
url,
type: 'POST',
data: 'fileName=' + fileName,
dataType: 'json',
success(data) {
console.log(data);
},
error(status) {
console.log(status.statusText);
}
});
return false;
});
};
export default deleteMedia;
还有我的 Coldfusion 文件 delete-media.cfc:
<cffunction name="deleteMedia" access="remote" returnType="any" returnformat="json">
<cfargument name="fileName" >
<cfset requestBody = toString( getHttpRequestData().content ) />
<!--- Double-check to make sure it's a JSON value. --->
<cfif isJSON( requestBody )>
<cfset VARIABLES.DeleteFileName = deserializeJSON( requestBody )>
<cffile
action = "delete"
file = "C:\pathToSite\img\#variables.DeleteFileName#"
>
<cfdump var="#variables.DeleteFileName#">
</cfif>
</cffunction>
当我在“网络”面板中检查时,这是发送 fileName = fileName 作为数据,并返回 200,尽管我看不到 cfdump 的内容。
我对 FE 没问题,对 CF 没那么热,我的猜测是我的 CF 过于复杂,但也没有做我希望它做的事情。我确实尝试参考了我不久前写的一些东西,另外还有:
How to use Ajax to pass Javascript variables to Coldfusion?
还有这个:
Passing and returning ColdFusion Structure via JQuery
有什么想法吗?
【问题讨论】:
-
是的,CFML 是相当老派的。我的第一个想法是您不需要使用 .cfc。简化端点并使其成为 .cfm 文件。通过输出 SerializeJSON(myReturnStruct) 将您想要的任何内容返回到前端,然后您可以通过查看 Ajax 成功回调中的返回数据进行调试,也可以使用 WriteLog()。您不需要调用 getHttpRequestData()。您的所有表单字段都将在端点的表单范围内。祝你好运。
-
我退休前采用的方法是首先让 CF 代码在独立文件中工作。然后我会把它放在 cfc 中,并在从 CF 调用函数时让它工作。从 JS 调用它是最后一步。顺便说一句,从 JS 调用 CF 代码时,你永远不会看到
cfdump的内容。 -
谢谢。我确实去了cffiddle.org 做一点调试。
-
我不同意不应使用 CFC 处理的断言。相反,我认为它绝对应该使用CFC。使用 a.cfm 进行 AJAx 调用是“老派”
-
@ScottStroz 你能概括一下区别吗?
标签: javascript jquery ajax coldfusion cfc