CFCでJquery/AJAX/JSONを使用して電子メールを送信しようとしています(簡単なのですか?私は近づいていますが、最後の部分にはまっています。私の失敗は明らかです。jQueryを使用してAJAXを使用してCFCにJSONを投稿
エラーが発生しました"サポートされていない操作です。詳細についてはアプリケーションログを確認してください。" ColdFusionから戻ってくると思います。
そのメッセージには、次のURLから来ている生成GETリクエスト:
http://servername/test.cfc?method=sendMail
:私は基本的なテストメールを送信し、ブラウザで私のCFCを呼び出すことができる午前
http://www.dumbass.com/CFIDE/componentutils/cfcexplorer.cfc?method=getcfcinhtml&name=blah.www.test&path=/blah/www/test.cfc
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="[email protected]"
to="[email protected]" subject="duh!!!">
You got mail!
</cfmail>
</cffunction>
は
AJAXは失敗メッセージ用に作成されたHTMLを戻すされますサポートされていない操作。詳細についてはアプリケーションログを確認してください」
私は共有CFマシン上にあり、アプリケーションログにアクセスできません。JSONとしてデータを渡していますか?私は悲しみの原因になっていますか? ()の代わりにフォーム上に?AJAXのjQuery以内
は私がtest.cfc?method=sendMail
を持っている。私はAJAX呼び出しの「データ」ブロック内のメソッドを置くべきか?
私はシオマネキがインストールされて持っている、と見ていますなぜなら、JqueryとAJAXを介してCFCにデータを送信するのはなぜか謎のようなものでなければならないからです。
誰かが私をまっすぐにしたり、私に実用的な例を教えてもらえれば、とても感謝しています。
UPDATE
私の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="[email protected]"
to="[email protected]" subject="#subject#">
Owning it!
#name# #subject# #email# #message#
</cfmail>
<cfset result ='{"sent":"yes"}'>
<cfreturn result />
</cffunction>
私は苦労していた最後のビットが正しくできるようにする方法でありますreturntype = "json"の使い方とその戻り値の作成方法 returntype="json"
のときにエラーが発生したので、私はreturntype="any"
を持っています。私はreturntype = "json"を使いたいと思います。ただし、これは:
<cfset result ='{"sent":"yes"}'>
<cfreturn result />
がエラーをスローします。私はreturntype = "json"を使うことができるように、同様の構造を作成する正しい方法は何ですか?私は将来CFCからJSONを返すことを望んでおり、手動で文字列を作成する必要はないと思っています。もしそれが意味をなさないならば。
<cfif success>
<cfset result ='{"sent":"yes"}'>
<cfelse>
<cfset result ='{"sent":"no"}'>
</cfif>
すなわち
は、どのように私は "結果" 私は戻り値の= "JSON" を使用できるようにすることができますか?
AjaxがPOSTであります...しないでください。したがって、ブラウザで試してみると、ajaxを使用する場合とは異なります。また、これはすべてajaxと同じドメイン上で行われていますか? – charlietfl
すべてのリクエストは同じドメインにあります。 – illiquent
私のコードを見直した後...私はJavaScriptの機能が矛盾していることがわかった。 上記のJSが見つかる前に、私は自分自身を書き込もうとしましたが、URLにメソッドを含めずに呼び出されました。一度削除してしまえば...「サポートされていない操作。アプリケーションログで詳細を確認してください。」というエラーは表示されなくなりました。 URLがメソッドを指定していないため、このエラーが返されていると思われます。 – illiquent