2011-11-24 64 views
1

我正在使用coldfusion和jquery。这是我第一次真正去jQuery,我已经搜索了很长时间没有破解这个,所以任何帮助将不胜感激...

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

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

  1. 用户从下拉框中选择和ID返回从选择传递给用户选项功能和用户选项以JSON arrary返回
  2. 用户ID。
  3. json数组循环遍历,并且在每次迭代中创建一个具有适当值的单选按钮。
  4. 然后将所有单选按钮输出到屏幕进行访问和选择。

我到目前为止的代码是这样的:

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

中所显示的JSON的 “警报(数据)” 弹出,这看起来不错,是这样的:

[{"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}] 

我需要知道如何循环访问这些数据,并为每个选项创建一个单选按钮,可能是这样的,并将它们全部显示在屏幕上,我猜我只需要通过dom写信给我,写:

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

我已经尝试了一些东西,但没有成功,如:

for(var i =0;i&lt;Data.length-1;i++) 
{ 
    var item = Data[i]; 
    alert(item.productname + item.id); 
} 

而且

$.each(data.items, function(i,item){  
    alert(item);  
    if (i == 3) return false;  
    }); 

我无法得到任何的这些工作。

无论如何,这是有点啰嗦。希望这是明确的,并再次提供任何帮助或建议表示赞赏。

谢谢!

回答

2

首先检查返回的data参数的数据类型。您可能首先需要使用.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); 
} 

这里有一个jsfiddle

+0

非常好,这正是我需要的。非常感谢你!!所以为了完成它,我添加了以下代码 'code'var obj = jQuery.parseJSON(data); var radios ='';对于(var i = 0; i '+ obj [i] .productname +'
'; } $(“#rightcolumn”)。html(radios);'code' – heartygooner

+0

非常好,这正是我所需要的。非常感谢你!!为了完成它,我添加了以下代码 'code var obj = jQuery.parseJSON(data); var radios ='';对于(var i = 0; i '+ obj [i] .productname +'
'; } $(“#rightcolumn”)。html(radios);' – heartygooner

0

我觉得该类型是一个字符串?如果是的话,请使用JavaScript函数eval来尝试。它将字符串转换为JavaScript类型..你的情况是这样的应该工作:

Var new_data = eval(data);

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

编辑:留在数据变量:

data = eval(data);

编辑2:

您的ajax调用未命中dataType属性:

dataType: "json"

有了这个,你不需要上面我说

+0

谢谢,elav()在成功函数中不起作用。 Firebug控制台错误是“缺少;在语句之前”。我在某处读取dataType:“#type#”已经过时了?当我补充说成功不再被解雇。我在url中有&returnformat = json。这是一个有效的选择吗? – heartygooner

+0

您的'&returnformat = json'仅适用于您的脚本说明需要生成哪些输出。所以你的脚本(whatyou调用)知道你想要一个json作为回报..当你将属性dataType添加到'$ .ajax'函数时,你说返回的结果是json和响应var(你的case'data' )为一个JSON对象.. '$就({ \t类型: “POST”, \t URL: “/jqueryui/com/autocomplete.cfc?method=getUserOptions&returnformat=json”, \t数据:({用户标识:UID}), \t数据类型: “JSON”, \t成功:功能(数据){ \t \t的console.log(数据); \t} });'< - 是有效 –

-1

使用每个循环得到的数据和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"); 
} 
+0

使用每个循环至获取数据和appendTo函数来打印带有result1 id的html元素中的数据 –