我在以下代码方面遇到问题。我想验证一个地址(城市,邮政编码,州),并对照我们的数据库(在CFC中称为)检查它。
当我为Ajax设置了dataFilter设置时,它进入错误状态并显示“ parseerror”,并且我没有看到字符串javascript返回。
当我删除dataFilter时,在控制台中,我看到了返回的javascript字符串,但对于成功设置,它始终进入“ else”状态。
有人知道发生了什么吗?我究竟做错了什么?
CFC确实根据Fiddler正确返回(是/否)。

$.ajax({
    type: "get",
    url: "/component/validateLenderAddress.cfc",
    data: {
        method: "validateZipCityState",
        returnFormat: "json",
        zip:$('input[name*="zip"]').val(),
        city:$('input[name*="city"]').val(),
        state:$('input[name*="state"]').val()
    },
    async: false,
    cache: false,
    dataFilter: function(data) {
        return $.parseJSON(data);
    },
    success:function(data) {
        if (data) {
            alert('Address Validated');
            return true;
        }
        else {
            alert('Address could not be validated');
            return false;
        }
    },
    error: function(xhr, ajaxOptions, thrownError) {
        alert(ajaxOptions);
    }
});


我的CFC是

<cfcomponent output="false" extends="component.Database" hint="validates lender address lendermaint.inc">
<cffunction name="validateZipCityState" output="false" returnType="struct" access="remote">
     <cfargument name="zip" type="string" required="true">
     <cfargument name="city" type="string" required="true">
     <cfargument name="state" type="string" required="true">

     <cfset var local = structNew()>

     <cfquery name="local.zipCodeList" datasource="#getDSN()#" username="#getUsername()#" password="#getPassword()#">
          SELECT TOP 1 1
          FROM ZipCode
          WHERE zipCode = <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(arguments.zip)#">
               AND city = <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(arguments.city)#">
               AND stateShort = <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(arguments.state)#">
     </cfquery>

     <cfreturn local.zipCodeList.recordCount EQ 1>
</cffunction>




谢谢!

最佳答案

不用设置dataFilter而是只需设置{ dataType : "json" }即可,而无需使用dataFilter。另外,如果将响应的标头设置为Content-type: application/json,则jquery将自动将响应作为json处理。

另外,考虑删除异步,因为您已经有处理程序等待响应,并且这可能锁定浏览器并移动您的错误,并完成处理程序以使用jqXHR .done()和.fail()

09-20 12:57