Javascript 如何从$.ajax()成功回调访问和输出json结果

Javascript 如何从$.ajax()成功回调访问和输出json结果,javascript,jquery,coldfusion,Javascript,Jquery,Coldfusion,我正在使用coldfusion和jquery。这是我第一次真正尝试jquery,我已经搜索和阅读了很长一段时间而没有破解它,因此任何帮助都将不胜感激 好的,我有一个自动完成返回一个id。然后我将id传递给第二个函数,该函数返回一个数据类型json数组。自动完成功能非常好,我可以让json显示在警报框中,但我对如何使用json结果有点困惑 我正在尝试循环json数组,并将值写入单选按钮,然后动态显示在页面上。。。所以整个想法是这样的 从下拉框中选择用户并返回id 选择中的用户id被传递给用户选项函

我正在使用coldfusion和jquery。这是我第一次真正尝试jquery,我已经搜索和阅读了很长一段时间而没有破解它,因此任何帮助都将不胜感激

好的,我有一个自动完成返回一个id。然后我将id传递给第二个函数,该函数返回一个数据类型json数组。自动完成功能非常好,我可以让json显示在警报框中,但我对如何使用json结果有点困惑

我正在尝试循环json数组,并将值写入单选按钮,然后动态显示在页面上。。。所以整个想法是这样的

  • 从下拉框中选择用户并返回id
  • 选择中的用户id被传递给用户选项函数,用户选项以json数组形式返回
  • json数组是循环的,每次迭代都会创建一个带有适当值的单选按钮
  • 然后将所有单选按钮输出到屏幕以供访问和选择
  • 到目前为止,我掌握的代码如下:

    <script type="text/javascript">
     // <!--
     $(document).ready(function() {
        $("#userName").autocomplete({
            cache:false,
            source: "/jqueryui/com/autocomplete.cfc?method=getUser&returnformat=json",
            //setup hidden fields
            select:function(event,ui) {
                var uid = ui.item.id;
                $("#userid").val(ui.item.id);
    
    
                // start call to get user options
                 $.ajax({
                     type: "POST",
                     url: "/jqueryui/com/autocomplete.cfc?method=getUserOptions&returnformat=json",
                     data: ({ userid: uid }),
                     success: function(data) {              
                        alert(data)
                        }
                     });
                /// end call to get user options
            }
        });
    });
    // --->
    
    </script>
    
    我需要知道如何循环浏览这些数据,并为每个选项创建一个单选按钮,可能类似于这样,然后将它们全部显示在屏幕上,我猜一旦我有东西要写,我将通过dom向a写入:

    <input type="radio" name="userOption" value="#id#|#qty#|#term#">#productname#
    

    这两个我都不能用

    不管怎么说,这有点啰嗦了。希望这是明确的,再次感谢任何帮助或建议


    谢谢

    首先检查返回的
    数据
    参数的数据类型。您可能首先需要使用
    .parseJSON()
    来构造JSON对象

    那么您的
    for
    循环语法不正确。此代码适用于我:

    var data = [{"productname":"licence free","quantity":1,"term":12,"id":1},
                {"productname":"licence basic","quantity":1,"term":24,"id":1},  
                {"productname":"licence full","quantity":1,"term":12,"id":2}];
    
    for (var i=0; i<data.length; i++) {
        alert(data[i].productname);
    }
    
    var data=[{“productname”:“无许可证”,“数量”:1,“术语”:12,“id”:1},
    {“productname”:“基本许可证”,“数量”:1,“术语”:24,“id”:1},
    {“产品名称”:“许可证已满”,“数量”:1,“期限”:12,“id”:2}];
    
    对于(var i=0;i首先检查返回的
    数据
    参数的数据类型。您可能首先需要使用
    .parseJSON()
    来构造JSON对象

    那么您的
    for
    循环语法不正确。此代码适用于我:

    var data = [{"productname":"licence free","quantity":1,"term":12,"id":1},
                {"productname":"licence basic","quantity":1,"term":24,"id":1},  
                {"productname":"licence full","quantity":1,"term":12,"id":2}];
    
    for (var i=0; i<data.length; i++) {
        alert(data[i].productname);
    }
    
    var data=[{“productname”:“无许可证”,“数量”:1,“术语”:12,“id”:1},
    {“productname”:“基本许可证”,“数量”:1,“术语”:24,“id”:1},
    {“产品名称”:“许可证已满”,“数量”:1,“期限”:12,“id”:2}];
    
    对于(var i=0;i尝试检查jquery函数。

    尝试检查jquery函数。

    我请求类型是否为字符串?如果是,请使用javascript函数eval尝试。它会将字符串转换为javascript类型。在您的情况下,类似的操作应该可以:

    Var new\u data=eval(data);

    现在它应该是一个可行的数组/对象

    编辑:要保留数据变量,请执行以下操作:

    data=eval(数据);

    编辑2:

    您的ajax调用忽略了dataType属性:

    数据类型:“json”


    有了这个,你就不需要上面的东西了,我说了,我问这个类型是字符串吗?如果是的话,用javascript函数eval试试。它会把字符串转换成javascript类型。在你的例子中,类似这样的方法应该可以:

    Var new\u data=eval(data);

    现在它应该是一个可行的数组/对象

    编辑:要保留数据变量,请执行以下操作:

    data=eval(数据);

    编辑2:

    您的ajax调用忽略了dataType属性:

    数据类型:“json”


    这样,您就不需要上面我说过的内容了

    使用each循环获取数据,并使用appendTo函数在带有result1 id的HTML元素中打印数据:

    dataType:"json", //nature of returned data
    success: function(data) {
        var  content = ''; 
    
        $.each(data, function(i, dbdata) {
            content += '<p>' + dbdata.columnName + '<p>';
        });
    
        $(content).appendTo("#result1");
    }
    
    dataType:“json”,//返回数据的性质
    成功:功能(数据){
    var内容=“”;
    $.each(数据、函数(i、dbdata){
    content+=''+dbdata.columnName+'';
    });
    $(内容)。附加到(“#结果1”);
    }
    
    使用each循环获取数据,并使用appendTo函数打印带有result1 id的HTML元素中的数据:

    dataType:"json", //nature of returned data
    success: function(data) {
        var  content = ''; 
    
        $.each(data, function(i, dbdata) {
            content += '<p>' + dbdata.columnName + '<p>';
        });
    
        $(content).appendTo("#result1");
    }
    
    dataType:“json”,//返回数据的性质
    成功:功能(数据){
    var内容=“”;
    $.each(数据、函数(i、dbdata){
    content+=''+dbdata.columnName+'';
    });
    $(内容)。附加到(“#结果1”);
    }
    
    谢谢,elav()在success函数中不起作用。Firebug控制台错误为“missing;before statement”。我在某处读到数据类型:“type”是过时的??当我添加成功不再触发时。我在url中有&returnformat=json。这是一个有效的替代方案吗?您的
    &returnformat=json
    仅适用于您的脚本,说明它需要生成什么输出。因此,您可以编写脚本(您调用什么)知道您想要一个json作为返回。当您将属性数据类型添加到
    $.ajax
    函数时,您会说返回的结果是json,响应变量(您的案例“数据”)是json对象。
    $.ajax({type:“POST”,url:/jqueryui/com/autocomplete.cfc?method=getUserOptions&returnformat=json),数据:({userid:uid}),数据类型:“json”,success:function(data){console.log(data);}});
    谢谢,elav()在success函数中不起作用。Firebug控制台错误为“missing;before statement”。我在某处读到数据类型:“type#”是过时的??当我添加成功不再触发时。我在url中有&returnformat=json。这是一个有效的替代方案吗?您的
    &returnformat=json
    仅适用于您的脚本,说明它需要生成什么输出。因此,您可以编写脚本(您调用什么)知道您想要一个json作为返回。当您将属性数据类型添加到
    $.ajax
    函数时,您会说返回的结果是json,响应变量(您的案例“数据”)是json对象。
    $.ajax({type:“POST”,url:/jqueryui/com/autocomplete.cfc?method=getUserOptions&returnformat=json),数据:({userid:uid}),数据类型:“json”,成功:函数(数据){conso
    
    dataType:"json", //nature of returned data
    success: function(data) {
        var  content = ''; 
    
        $.each(data, function(i, dbdata) {
            content += '<p>' + dbdata.columnName + '<p>';
        });
    
        $(content).appendTo("#result1");
    }