2017-03-06 49 views
0

设置会话变量,我想设置一个ColdFusion会话变量时的一个选择框的值发生变化。但是,我在一个警告框上出现错误,提示“Object HTMLSelectElement”并且不会更改会话变量。任何帮助都会很棒。通过Ajax的选择框使用ColdFusion

代码:

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> 
+0

我不确定在ajax调用中将item1作为数据传递给CF作为参数。我会将'&item1 ='+ item1Selected添加到URL的末尾并删除数据元素。否则,你将不得不在你的函数中使用getHTTPRequestData并反序列化数据。 – snackboy

回答

2

更改此:

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

这样:

<cfset session.item1 = arguments.item1> 

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

不相关的问题,但如果你让你的CF码只使用CF,这种故障排除变得轻松了许多工作。

+0

*使用CF *只根据这些原则,可以测试在浏览器中的 “远程” 功能:'HTTP://yourserver/yourcomponent.cfc方法= yourMethod&参数1 = blahblah'?。如果它抛出一个错误,你知道它也不会从jQuery工作。 – Leigh

1

(太长的评论)

除了Dan's comments about the error in the CFFunction,二是可以防止代码从表现为你的其他问题希望:

  1. success()功能响应变量定义为item1Selected。通过使用警报(item1),您实际上显示的是<select>元素,而不是来自ajax调用的响应。

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