我碰到了一个问题,可能要花费比我更愿意承认跟踪此事的时间。

具体来说,我有一个jQuery AJAX调用,该调用将一些数据发布到.cfc中,我调用该方法,并传入一些参数,然后运行一些数据库查询,然后不返回任何内容。然后,我使用AJAX函数的成功方法继续。

我在ColdFusion 11服务器上开发了它,并且可以正常工作。但是,在我最近迁移到Lucee服务器时,与此有关的各种问题。

首先,我注意到没有调用成功方法。但是,Firebug报告呼叫结果为200 OK。因此,我进一步检查了一下,数据库查询全部在该方法中运行。除此以外,Lucee日志看起来也很干净,并确认数据库查询已成功运行。因此,一切都很好(我知道要检查的东西)。我做了一些基础工作,并尝试了不同的机器和不同的浏览器,尽管这是很具体的,但是没有任何麻烦。

我注意到Firefoxes Inspect Element抛出“找不到元素”错误,经过进一步检查,它返回的是我发布到cfc的参数未定义。这使我进行了进一步的挖掘,我注意到它正在返回此错误“ XML分析错误:未找到元素”仍然说返回是200 OK,但还不足以进行AJAX调用的成功方法。

我曾经尝试并没有取得实际结果的其他想法都在启用CORS,包括JSON的返回类型(它删除了XML错误,但几乎没有做其他事情)。

关于我可以尝试的方法的任何想法,我开始怀疑整个Lucee设置是否被破坏,我是否需要报废并重新安装?

感谢您提供的任何帮助或想法。

编辑:抱歉不附加代码,因为这似乎已连接到服务器设置,我天真地希望有人去:“是的,您需要设置此设置并修改此文件,您一切都很好!”然后,我们都会嘲笑Tomcat。

我假设第一个评论说:“给我们看您的代码!”事实并非如此。因此,根据提示,我整理了一个最小的测试案例,该案例仍然确认了我的原始问题:

test.cfm

<!--- jQuery 2.1.4 --->
<script src="./jQuery-2.1.4.min.js"></script>

<script>
$(document).ready(function() {
    $.ajax({
        type: "post",
        url: "./test.cfc",
        data: {
            method: "test",
            var1: "var1",
            var2: "var2"
        },
        success: function(result) {
            alert('Hello Friend!');
        }
    });
});
</script>


test.cfc

<CFCOMPONENT>

    <!--- Test Function --->
    <CFFUNCTION NAME="test" ACCESS="remote">

        <CFARGUMENT NAME="var1" />
        <CFARGUMENT NAME="var2" />

        <CFOUTPUT>
            Var 1: #var1#<br />
            Var 2: #var2#
        </CFOUTPUT>

    </CFFUNCTION>
    <!--- End Test Function --->

</CFCOMPONENT>


而且可能更重要的是,我使用的是Lucee 4.5.1.023

像以前一样,任何帮助总是倍受赞赏。

最佳答案

所以我小睡了一会儿,然后回到这个问题上。我认为这与代码或ColdFusion的风格无关,而与Web服务器有关。

我开始使用各种可用的dataType,并开始看到返回结果的变化。它们并没有立即出现,因为它们前面有大量的空白。

因此,部分问题是我自己的错误编码。我通常仅在需要返回特定内容时使用dataType,例如JSON,否则我将其保留,将对返回的内容进行“智能猜测”。我猜想我的场景中的主要区别是使用Apache HTTP Server(工作)与Apache Tomcat(无效),因此当我包含dataType:'text'然后自由使用jQuery函数.trim()时可以实现我想要的。

因此,我也在此过程中使我的代码变得更好。

希望这可以帮助某人(至少对我而言)发疯,难以诊断半静默失败的问题。

10-06 07:45