gpt4 book ai didi

jquery - 使用 jQuery AJAX 将 JSON 发布到 CFC

转载 作者:行者123 更新时间:2023-12-03 23:04:21 28 4
gpt4 key购买 nike

我正在尝试使用 Jquery/AJAX/JSON 和 CFC 来发送电子邮件(很简单吧?)在花了很多时间试图找到一个完整的示例来说明它应该如何工作之后,我已经接近但被困住了在最后一部分。我的失败是显而易见的。

我从(我认为)ColdFusion 返回“不支持的操作。检查应用程序日志以获取更多详细信息。”错误。

生成该消息的 GET 请求来自以下 URL:

http://www.dumbass.com/CFIDE/componentutils/cfcexplorer.cfc?method=getcfcinhtml&name=blah.www.test&path=/blah/www/test.cfc

我可以在浏览器中调用我的 CFC,它会发送基本测试电子邮件:

http://servername/test.cfc?method=sendMail

向 CFC 发送的表单按如下方式发送:

method=sendMail&name=BOB&email=bob%40bitchin.com&subject=Message+from+contact+form&message=bob+is+really+bitchin

这是 jQuery

$.ajax({
type: "POST",
url: "test.cfc?method=sendMail",
data: {
"name": $("#footer-form #name2").val(),
"email": $("#footer-form #email2").val(),
"subject": "Message from contact form",
"message": $("#footer-form #message2").val()
},
dataType: "json",
success: function(data) {
if (data.sent == "yes") {
$("#MessageSent2").removeClass("hidden");
$("#MessageNotSent2").addClass("hidden");
$(".submit-button").removeClass("btn-default").addClass("btn-success").prop('value', 'Message Sent');
$("#footer-form .form-control").each(function() {
$(this).prop('value', '').parent().removeClass("has-success").removeClass("has-error");
});
} else {
$("#MessageNotSent2").removeClass("hidden");
$("#MessageSent2").addClass("hidden");
}
}
});

这是 CFC,(甚至没有尝试使用提交的表单字段):

 <cfcomponent output="false" access="remote">
<cffunction name="sendMail" access="remote" returntype="void">
<cfmail from="do-not-reply@dumbass.com"
to="illiquent@gmail.com" subject="duh!!!">
You got mail!
</cfmail>
</cffunction>

AJAX 正在返回为失败消息创建的 HTML:“不支持的操作。请检查应用程序日志以获取更多详细信息。”

我在共享 CF 计算机上,无法访问应用程序日志。是否以 JSON 形式传递数据让我感到悲伤?我应该在表单上使用serialize() 吗?

在 AJAX Jquery 中,我有 test.cfc?method=sendMail。我应该将该方法放在 AJAX 调用的“数据” block 中吗?

我已经安装了 fiddler,并且正在查看 header ,但我仍然不明白为什么通过 Jquery 和 AJAX 向 CFC 提交数据应该是一个谜。

如果有人可以纠正我或向我指出一个可行的示例,我将非常感激。

更新

在检查了我的 javascript 之后 - 我发现表单提交也调用了一个不同的函数 - 这导致了“检查应用程序日志以获取更多详细信息”。这是导致我出现问题的函数:

 $(document).ready(function () {
//this function was getting called in addition to one posted
// above.
$("input#submit1").click(function(){
console.log('WTF');
console.log($('form#footer-form').serialize());
$.ajax({
type: "POST",
// this is where I wasn't specifying the method!
// it should have been test.cfc?method=sendMail
url: "test.cfc", //process to mail
// still thinking about serialize to make this flexible
data: $('form#footer-form').serialize(),
success: function(msg){
$("#thanks").html(msg) //hide button and show thank you
$("#form-content").modal('hide'); //hide popup
},
error: function(){
alert("failure");
}
});
});
});

这是我更新后的 CFC,它正在“工作”:

 <cffunction name="sendMail" access="remote" returnformat="json" returntype="any">
<cfargument name="name" required="true" />
<cfargument name="subject" required="true" />
<cfargument name="email" required="true" />
<cfargument name="message" required="true" />



<cfmail from="do-not-reply@dumbass.com"
to="me@dumbass.com" subject="#subject#">
Owning it!
#name# #subject# #email# #message#
</cfmail>

<cfset result ='{"sent":"yes"}'>

<cfreturn result />

</cffunction>

我正在努力解决的最后一点是如何正确允许使用 returntype="json"以及如何为此创建返回值。我有 returntype="any" 因为当我有 returntype="json" 时我收到错误。我想使用 returntype =“json”。然而这个:

<cfset result ='{"sent":"yes"}'> 
<cfreturn result />

抛出错误。创建类似结构以便我可以使用 returntype="json"的正确方法是什么?我确信将来我会想要从 CFC 返回 JSON,并且不想手动构建字符串......如果这有意义的话。

<cfif success>
<cfset result ='{"sent":"yes"}'>
<cfelse>
<cfset result ='{"sent":"no"}'>
</cfif>

如何制作“结果”以便我可以使用 returntype="json"?

最佳答案

使用 test.cfm 页面代替 test.cfc。这是它的代码:

<cfswitch expression="#url.method#">

<cfcase value="sendMail">
<cfmail from="do-not-reply@dumbass.com"
to="illiquent@gmail.com" subject="duh!!!">
You got mail!
</cfmail>

<cfset result = structNew()>
<cfset result['sent'] = true />
<cfoutput>#SerializeJSON(result)#</cfoutput>

</cfcase>

</cfswitch>

你还需要调整一下 javascript

电话应该是

url: "test.cfm?method=sendMail",

而不是

if (data.sent == "yes") {

你需要

if (data.sent) {

关于jquery - 使用 jQuery AJAX 将 JSON 发布到 CFC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36524683/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com