ColdFusion & jQuery 异步服务代理

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);
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值