ColdFusion cfmproxy.cfm 代码:
/**
* @hint 返回 ajax 提交的请求对象
* @returntype any
*/
function getAjaxRequest()
{
var content = getRequestContent();
if (content == "" && IsDefined("URL.p")) {
content = URL.p;
}
if (IsJSON(content))
{
return DeserializeJSON(content);
}
else {
return "";
}
}
/**
* @hint 返回页面的请求内容
* @returntype string
*/
function getRequestContent()
{
var result = "";
var httpRequest = GetPageContext().getRequest();
var contentLength = httpRequest.getContentLength();
if (contentLength GT 0)
{
byteArray = getByteArray(contentLength);
httpRequest.getInputStream().readLine(byteArray, 0, contentLength);
result = ToString(createObject("java", "java.lang.String").init(byteArray));
}
return result;
}
<cfprocessingdirective pageencoding="utf-8" />
<cftry>
<cfscript>
cfmResult = {};
cfmResult.success = false;
cfmInfo = $Utils.getAjaxRequest();
</cfscript>
<cfif IsStruct(cfmInfo) And StructKeyExists(cfmInfo, "cfmpage") And StructKeyExists(cfmInfo, "method")>
<cfinclude template="#cfmInfo.cfmpage#"/>
<cfscript>
if (StructKeyExists(Variables, cfmInfo.method))
{
method = Variables[cfmInfo.method];
if (IsDefined("cfmInfo.arguments"))
{
cfmResult.data = method(argumentCollection = cfmInfo.arguments);
}
else {
cfmResult.data = method();
}
cfmResult.success = true;
}
else {
cfmResult.data = "请求的方法不存在";
}
</cfscript>
<cfelse>
<cfset cfmResult.data = "请求格式错误">
</cfif>
<cfcatch type="any">
<cfset cfmResult.data = cfcatch.Message />
<cfif _$ReturnExceptionDetail{1}gt;
<cfset cfmResult.Exception = cfcatch>
</cfif>
</cfcatch>
</cftry>
<cfcontent type="application/json; charset=utf-8"/>
<cfoutput>#SerializeJSON(cfmResult)#</cfoutput>
客户端 jQuery 代码:
_postCFProxy: function (request) {
var dtd = jQuery.Deferred();
jQuery.ajax({
type: "POST",
url: request.url,
contentType: "application/json",
data: jQuery.toJSON(request)
})
.done(function (data, textStatus, jqXHR) {
if (data.SUCCESS) {
dtd.resolve(data.DATA);
}
else {
dtd.reject(data);
}
})
.fail(function (jqXHR, textStatus, errorThrown) {
dtd.reject({ DATA: jqXHR.responseText }, jqXHR);
});
return dtd.promise();
},
_callcfm: function (cfm, method, params) {
var cfminfo = {
url: "cfmproxy.cfm",
cfmpage: cfm,
method: method
};
if (params) {
cfminfo.arguments = params;
}
return this._postCFProxy(cfminfo);
}