ColdFusion和AJAX - GET 403(禁止)

时间:2014-10-28 22:37:19

标签: jquery ajax coldfusion

我正在尝试学习如何使用ColdFusion,jQuery和AJAX完成相当简单的任务,但遇到了一个我无法弄清楚的问题。

对于这个概念验证,我创建了简单的假数据。数据库中的表只包含3个字段(ID,名称和评级)。在“主”页面上,我将这些数据显示在一个表中,其中“rating”是一个下拉输入。我正在尝试使用AJAX在用户更改值时更新“评级”。

就jQuery方面而言,我有两个变量分配给“已更改”ID及其新评级。我在“更改”功能中有以下代码(它本身工作正常): $.post('update.cfc', {ID: inputID, rating: selRat})

<cfcomponent>
    <cffunction name="updateRating" access="remote" output="false">

        <cfquery datasource="#session.db#" name="update">
            UPDATE ajaxTest
            SET rating = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.rating#">
            WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.ID#">
        </cfquery>

    </cffunction>
</cfcomponent>

当我转到页面并更改值时,我在控制台中收到以下错误(虽然路径没有意义,但它指向正确的位置): Console Error Message

这很可能很简单,但我似乎无法弄明白。

2 个答案:

答案 0 :(得分:3)

您应该通过jQuery发布到update.cfc?method=updateRating

然后在您的函数中添加IDrating作为<cfargument>,并引用您的变量,就像它们位于ARGUMENTS范围内,而不是FORM

答案 1 :(得分:0)

尝试将其包装在这样的cftry中。这将返回EID为0,如果一切都通过,或者EID为1,如果有错误,它也将返回错误。

根据你之前关于这个cfc的问题,我记得我建议将它放在一个带有自己的application.cfc的隔离文件夹中(以便于测试)。如果你这样做,那么它可能是session.db绊倒你,因为它可能没有被定义。无论如何,这段代码应该清楚地定义错误。

<cfcomponent>
    <cffunction name="updateRating" returntype="struct" access="remote" output="false" returnformat="json">
      <cfset local.restruct = structnew()>
      <cfset local.restruct.eid = 0>
      <cftry>
        <cfquery datasource="#session.db#" name="update">
            UPDATE ajaxTest
            SET rating = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.rating#">
            WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.ID#">
        </cfquery>
        <cfcatch>
          <cfset local.restruct = cfcatch>
          <cfset local.restruct.eid = 1>
        </cfcatch>
      </cftry>

      <cfreturn local.restruct>
      <!--- If eid returns 0, everything is fine, if it returns 1, error data is returned with it --->
    </cffunction>
</cfcomponent>

并且,用javascript粗略地调用它。目前,这将返回基本的Alerts()和console.log(),但您可以使它做任何你喜欢的事情。它也没有实际传递变量的现状,只是平面数据

$("#formname").submit(function(e) {
    var postData = $(this).serializeArray();
    var formURL = "/enter/path/to/file.cfc?method=updateRating";
    $.ajax(
    {
        url : formURL,
        type: "POST",
        data : {ID: 1, rating: 3},
        success:function(data, textStatus, jqXHR) 
        {
            var pObj = data;
            if (pObj.EID == 1) {
                for(key in pObj) {
                    if (pObj[key].length) {
                        alert(key + ": " + pObj[key]);
                        console.log(key + ": " + pObj[key]);
                    }
                }
            } else {
              alert("success");
            }
        },
        error: function(jqXHR, textStatus, errorThrown) 
        {
            //if fails      
        }
    });
    e.preventDefault(); //STOP default action
    // e.unbind(); //unbind. to stop multiple form submit.
});