Tôi đang cố gắng sử dụng Jquery/AJAX/JSON với CFC để gửi email (dễ dàng?) Sau khi dành nhiều giờ cố gắng tìm một ví dụ hoàn chỉnh về cách thức hoạt động này , Tôi đang đến gần nhưng bị kẹt ở phần cuối. Thất bại của tôi là điều hiển nhiên.sử dụng jQuery AJAX để đăng JSON lên CFC
Tôi gặp lỗi "Thao tác không được hỗ trợ. Kiểm tra nhật ký ứng dụng để biết thêm chi tiết". quay lại từ (tôi nghĩ) ColdFusion.
Các yêu cầu GET mà tạo ra thông điệp rằng đến từ URL sau:
http://www.dumbass.com/CFIDE/componentutils/cfcexplorer.cfc?method=getcfcinhtml&name=blah.www.test&path=/blah/www/test.cfc
tôi có thể gọi CFC của tôi trong một trình duyệt, mà không gửi một email thử nghiệm cơ bản:
http://servername/test.cfc?method=sendMail
Bài đăng biểu mẫu cho CFC đang được gửi đi như vậy:
method=sendMail&name=BOB&email=bob%40bitchin.com&subject=Message+from+contact+form&message=bob+is+really+bitchin
Đây là 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");
}
}
});
Đây là CFC, (thậm chí không cố gắng sử dụng các trường mẫu đã gửi):
<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 được đưa trở lại HTML được tạo ra cho thông điệp thất bại: " Thao tác không được hỗ trợ. Kiểm tra nhật ký ứng dụng để biết thêm chi tiết. ".
Tôi đang ở trên một máy CF được chia sẻ và không có quyền truy cập vào nhật ký ứng dụng. Có phải nó chuyển dữ liệu như JSON gây đau buồn cho tôi không?() trên các hình thức thay thế?
trong AJAX jquery tôi có test.cfc?method=sendMail
. tôi có nên đặt phương pháp trong khối 'dữ liệu' của AJAX gọi?
tôi đã có cáy được cài đặt, và đang xem xét các tiêu đề, nhưng tôi vẫn không hiểu tại sao việc gửi dữ liệu tới CFC qua Jquery và AJAX phải là một điều bí ẩn quá.
Nếu bất cứ ai có thể làm thẳng tôi hoặc chỉ cho tôi một ví dụ làm việc, tôi sẽ rất cảm kích.
CẬP NHẬT
Sau khi xem xét javascript của tôi - tôi thấy rằng tôi đã có một chức năng khác nhau cũng được gọi bằng hình thức nộp - nhưng lại gây "Kiểm tra log ứng dụng để biết thêm chi tiết". Đây là chức năng mà đã gây ra vấn đề đối với tôi:
$(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");
}
});
});
});
Đây là CFC cập nhật của tôi mà là "làm việc":
<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>
Bit cuối cùng tôi đang phải vật lộn với là làm thế nào để cho phép đúng cách việc sử dụng returntype = "json" và cách tạo giá trị trả về cho điều đó xảy ra. Tôi có returntype="any"
vì tôi gặp lỗi khi tôi có returntype="json"
. Tôi muốn sử dụng returntype = "json".Tuy nhiên, điều này:
<cfset result ='{"sent":"yes"}'>
<cfreturn result />
ném lỗi. Cách chính xác để tạo ra một cấu trúc tương tự để tôi có thể sử dụng returntype = "json" là gì? Tôi chắc chắn trong tương lai tôi sẽ muốn trả lại JSON từ CFC và không muốn phải xây dựng các chuỗi bằng tay ... nếu điều đó có ý nghĩa gì.
tức
<cfif success>
<cfset result ='{"sent":"yes"}'>
<cfelse>
<cfset result ='{"sent":"no"}'>
</cfif>
Làm thế nào tôi có thể làm cho "kết quả" như vậy mà tôi có thể sử dụng returntype = "json"?
các ajax là POST ... không GET. Vì vậy, khi bạn thử nó trong trình duyệt khác với việc sử dụng ajax. Ngoài ra là tất cả điều này trên cùng một tên miền như trang ajax đang được thực hiện từ đâu? – charlietfl
tất cả các yêu cầu đều nằm trên cùng một miền. – illiquent
sau khi xem xét mã của tôi ... Tôi thấy tôi đã có các chức năng javascript xung đột. trước khi tôi tìm thấy JS được đăng ở trên, tôi đã cố gắng để viết của riêng tôi, mà không bao gồm các phương pháp trong URL được gọi. một khi tôi đã xóa nó ... Tôi không còn nhận được lỗi "Thao tác không được hỗ trợ. Hãy kiểm tra nhật ký ứng dụng để biết thêm chi tiết." Tôi nghi ngờ lỗi này đã được trả lại vì URL không chỉ định phương thức. – illiquent