Lucee / AJAX / CFARGUMENT 失败

Lucee / AJAX / CFARGUMENT failing

我遇到了一个问题,我承认追踪这件事情的时间可能超过了我愿意承认的时间。

具体来说,我有一个 jQuery AJAX 调用,它将一些数据发布到 .cfc 我调用该方法并传入一些参数 运行 一些数据库查询和那么什么都没有 returned。然后我使用 AJAX 函数的成功方法继续。

我是在 ColdFusion 11 服务器上开发的,效果很好。然而,在我最近迁移到 Lucee 服务器时,我遇到了各种各样的问题。

首先我注意到没有调用成功方法。但是 Firebug 正在报告通话中的 200 OK。所以我进一步检查,数据库查询在方法中包含所有 运行 。除此之外,Lucee 日志看起来也很干净,并确认数据库查询 运行 成功。所以一切都报告正常(我知道要检查的事情)。我已经完成了基础知识并尝试了不同的机器和不同的浏览器,以防万一这是特定的,但没有任何变化。

我注意到 Firefoxes Inspect Element 抛出一个没有找到元素的错误,并且在进一步检查后 returning 我发布到 cfc 的参数是未定义的。这让我进一步挖掘,我注意到它是 returning 这个错误 'XML Parsing Error: no element found' 仍然说 return 是 200 OK,但还不够好,无法成功AJAX 调用的方法。

我有过并尝试过但没有实际结果的其他想法是启用 CORS,包括 return 类型的 JSON(它消除了 XML 错误,但几乎没有其他作用)。

关于我可以尝试什么的任何想法,我开始怀疑整个 Lucee 设置是否有问题,我需要废弃它并重新安装吗?

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

编辑: 抱歉没有附上代码,因为这似乎连接到服务器设置我天真地希望有人会去,"Yeah you need to set this setting and modify this file and you're all good!" 然后我们Tomcat 大家都会笑的。

我假设第一条评论说 "Show us your code!" 事实并非如此。因此,根据提示,我整理了一个最小测试用例,它仍然证实了我原来的问题:

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 的代码或风格无关,而与网络服务器有关。

我开始使用各种可用的数据类型,并开始看到 return 结果的变化。它们并没有立即显现出来,因为它们之前有大量的白色 space。

所以这个问题的一部分是我自己的错误编码。我通常只在需要特定的 returned 时才使用数据类型,例如JSON,否则我将其省略,并且将在 return 编辑的内容上制作 "intelligent guess"。我猜想我的场景的主要区别是使用 Apache HTTP Server(有效)与 Apache Tomcat(无效)所以当我包含 dataType: 'text' 然后自由地使用 jQuery function .trim() 我可以实现我想要的。

我也因此在这个过程中改进了我的代码。

希望这能帮助那些发疯的人(至少对我来说)难以诊断半静默失败的问题。