使用jquery和coldfusion选择由json响应填充的框

时间:2012-03-27 16:04:21

标签: jquery coldfusion

让我先说一下这个问题。我刚刚开始使用jquery,所以请善待。

我已经搜索过这个答案了,我似乎找不到任何有用的东西,所以我在这里问这个问题。

我将有一个页面,其中包含一组选择框,这些选择框将根据选择的选项中的哪个选项填充复选框列表。我还没到那么远。到目前为止,我所有人都使用$.ajax从服务器检索数据。如果我查看firebug控制台,我会看到我的JSON字符串。

{"DESCRIPTION":"Global Alpha I Benchmark","INCEPTION_DATE":"2004-02-29 00:00:00.0","DISCLOSURE":"","BENCHMARK_ID":"EBDVGA1INDEX"}

这是javascript:

    $(document).ready(function(){
    $(':input:visible:enabled:first').focus();
    $(function(){
        $("select#benchmarks").change(function(){
            var formval = {benchmarks:$(this).val()}
            $.ajax({
                type:"POST",
                data: formval,
                url: "request_processor.cfm",
                datatype: "json",
                success:$(function(response){alert(response);})

            });
        });
    });
});

HTML:

<cfform name="testForm">
<div align="center" id="databox">
    <cfselect id="benchmarks" name="benchmarks" query="getBenchmarks" queryPosition="below" value="benchmark_id" display="benchmark_id">
        <option value="">Please Select an ID...</option>
    </cfselect>
    <cfselect id="myselect" name="myselect"></cfselect>
</div>
<div id="contentdiv"></div>

我已经搞砸了,现在我甚至无法在屏幕上显示数据,所以我不知道该怎么做。任何帮助,将不胜感激。 \

更新:

@Rob

我已将以下内容添加到ajax调用的成功部分。

$.each(response,function(index){
options = "<option value='"+ response.description + "'>" + response.description + "</option>"
});
$("select#myselect").html(options);    

现在没有任何反应!没有javascript错误,在firebug控制台中没有错误。

2 个答案:

答案 0 :(得分:2)

success:$(function(response){alert(response);})

应该是

success:function(response){alert(response);}

$(function)是$(document).ready(function)的快捷方式,所以你实际上并没有为ajax成功回调绑定一个真正的函数。

更新: 刚注意到你有另一个不需要的$()

$(function(){
  $("select#benchmarks").change(function(){
  ...
)

您已经在文档就绪事件中,此时无需再添加另一个回调文档。

答案 1 :(得分:1)

我发现您的“每个”代码存在一些问题。首先,根据您最初发布的JSON字符串,您只有一个对象。除非你将它包装在[]中,否则.each将迭代每个属性,例如描述和起始日期。如果它被括在括号中,它将迭代它就像它是一个数组一样,对于集合中的每个项目都是一次。

因此,假设您将数组传递给它,您的代码应如下所示:

var options = '';
$.each(response, function(){
    options += "<option value='"+ this.DESCRIPTION + "'>" + this.DESCRIPTION + "</option>";
});
$("select#myselect").html(options);

我做了两处修改。首先,我连接到选项字符串,因此收集所有选项。我也使用“this”来指向循环中的正确项目。

编辑:我也改变了描述的情况。我相信它区分大小写。