2010-10-21 68 views
2

我已经开发出使用$ .getJSON PHP脚本接收JSON数据的脚本。 JSON数据看起来像 '[{ “选项”: “smart_exp”},{ “选项”: “user_intf”},{ “blahblah” “选项”}]'使用json数据动态生成下拉列表?

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript" language="javascript"> 
//$('document').ready(function() { 

function Preload() { 
    $.getJSON("http://localhost/conn_mysql.php", function(jsonData){ 
    $.each(jsonData, function(i,j) 
    { alert(j.options);}); 
});} 

// }); 

</script></head> 
<body onLoad="Preload()"> 
</body> 
</html> 

我还开发了一个脚本它使用数组动态地生成下拉列表。

<HTML> 
<HEAD> 
<script language="javascript"> 
var myarray = new Array("apples","oranges","bananas","Peac"); 
function populate() 
{ for (i=0; i<myarray.length; i++) 
{ 
document.form1.fruits.options[i]=new Option(myarray[i], i); 
} 
} 
</script> 
</HEAD> 
<body onload="populate();"> 
<form name="form1"> 
My favourite fruit is : 
<select name="fruits" /> 
</form> 
</body> 
</HTML> 

现在我需要使用的getJSON返回的数据动态生成一个下拉列表,但我在合并两个有问题。我将非常感谢帮助。这是我试图做的,但它不工作。

<html> 
    <head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script type="text/javascript" language="javascript"> 
    //$('document').ready(function() { 

    function Preload() { 
    var myarray = new Array(); 
    $.getJSON("http://localhost/conn_mysql.php", function(jsonData){ 
    $.each(jsonData, function(i,j) 
    { myarray = j.options;});}); 
    for (i=0; i<myarray.length; i++) 
    { document.form1.fruits.options[i]=new Option(myarray[i]); } 
    } 
    // }); 
    </script></head> 
    <body onLoad="Preload()"> 
    <form name="form1"> 
    My favourite fruit is : 
    <select name="fruits" /> 
    </form> 
    </body> 
    </html> 

回答

1

首先,.getJSON()使用回调,这意味着作为.getJSON()第二个参数执行的代码不一定会一直是选项的名称由你的01时间调用循环运行。一旦服务器回应你的JSON数据,它就会运行。尝试嵌套它:

function Preload() { 
    $.getJSON("http://localhost/conn_mysql.php", function (jsonData) { 
     $.each(jsonData, function (i, j) { 
      document.form1.fruits.options[i] = new Option(j.options); 
     }); 
    }); 
} 

您应该知道您的jsonData的结构。在这里,如果结构是这样只会工作:

[ 
    { options: "item 1" }, 
    { options: "item 2" }, 
    { options: "item 3" }, 
] 

它遍历整个对象,发现该阵列中的每个元素,然后查找该元素的options财产。那是你在找什么?

+0

Grate,ur grate ...... thanX a许多。它的工作现在与我们的代码。一个问题是它只能在IE浏览器中运行,不能在Firefox中运行。我认为我需要做// $('document')。ready(function()工作,因为我无法修复它,所以现在在我的代码中进行了评论。你能否看到它,我认为它只会引起问题。可以告诉我更多的事情,可以纯净的,即JS渲染引擎在这种情况下使用。假如我没有任何有关JS渲染引擎的信息。比X再次clarkf :-) - – XCeptable 2010-10-21 20:37:14

+0

@babar - I'我不确定你在问什么。如果你问纯粹的模板库(http://beebole.com/pure/),当然可以在这里使用它。您需要在PHP脚本中稍微修改一下JSON数据(我认为,我不熟悉纯文本)。查看文档? – clarkf 2010-10-21 20:43:47

0

我看到的一个问题是,在您的每个循环中,您只是将j.options分配给myarray,而不是将其添加到数组中。更改为:

myarray.push(j.options); 
2

我不知道你的JSON数据是什么样子,但也许你需要的是这样的:

function Preload() { 
    $.getJSON("http://localhost/conn_mysql.php", function(jsonData){ 
    $.each(jsonData, function(i,j){ 
     $('#ID-OF-YOUR-SELECT-ELEMENT').append(
     $('<option></option>').val(j.value).html(j.text) 
    ); 
    } 
); 
});} 

j.value =你要添加的选项的值 j.text =您要添加(用户看到)

+0

它看起来像[{“options”:“smart_exp”},{“options”:“user_intf”},{“options”:“blahblah”}] – XCeptable 2010-10-21 20:17:51

0

的Internet Explorer/Firefox的问题可能是由于该网页的编码类型 - 建议尝试UTF-8。