使用带有Coldfusion的Ajax通过选择框设置会话变量

时间:2017-03-06 11:57:56

标签: ajax coldfusion

我正在尝试在选择框的值更改时设置coldfusion会话变量。但是,我在警告框中收到错误,说“对象HTMLSelectElement”并且没有更改会话变量。任何帮助都会很棒。

代码:

Form.cfm

<cfset session.item1 = 0>
<cfselect name="item1" class="form-control" id="item1">
        <option value="0">0</option>
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="30">30</option>
        <option value="40">40</option>
        <option value="50">50</option>
</cfselect>

脚本

$('#item1').change( function() {
          var item1Selected = $('#item1').val(); 
        $.ajax({
            url: '\components.cfc?method=getItem1', // You repeated "url:" in your url
            data: {item1: item1Selected}, // added missing final comma
            success: function(item1Selected) { alert(item1); }
          });
        }); 

Components.cfc

<cffunction name="getItem1" access="remote" returntype="any">
        <cfargument name="item1" type="any" required="yes">
        <cfset session.item1 = #argument.item1#>

        <cfreturn />
</cffunction>

2 个答案:

答案 0 :(得分:2)

改变这个:

<cfset session.item1 = #argument.item1#>

到此:

<cfset session.item1 = arguments.item1>

正确的范围是参数,即参数的复数。另外,你不需要英镑符号。

与您的问题无关,但如果您的CF代码仅使用CF工作,则此类故障排除变得更加容易。

答案 1 :(得分:1)

(评论太长)

除了Dan's comments about the error in the CFFunction之外,还有其他两个可能阻止代码按预期运行的问题:

  1. 您的var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^‌​#\&\?]*).*/; 函数将响应变量定义为success()。通过使用alert(item1Selected),您实际上显示的是item1元素,而不是来自ajax调用的响应。

  2. <select>实际上并没有返回任何内容,即cffunction因此,即使您修改了变量名,响应也将是未定义的或空白的。不需要返回响应。但是,如果您确实想要将某种数据返回到<cfreturn />,则需要修改该函数以返回某些内容(JSON,等等)。