为什么JavaScript没有显示解析的json数据?

时间:2010-10-27 11:08:58

标签: javascript json eval

这是JSON数据的格式:[{“options”:“smart_exp”},{“options”:“user_int”},{“options”:“blahblah”}]我通过服务器的getjson收到。我需要用用户输入附加json。我试图这样做:第一次将其转换为javascript对象,用用户输入附加,再次转换为json对象&将其发送回服务器以进行数据库更新。我已经使用eval()将json转换为javaScript对象。现在无法操纵javascript对象。如果我将javascript对象转换回json对象,它会正确显示从服务器发送的所有数据。

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
 <html><head></head>
 <body> 
 <form name="index">
 <p><input type = "text" id = "txt" name = "txt"></input></p>
 <p><input type = "button" id = "send" name = "send" value = "send" 
 onClick="ADDLISTITEM();"></input></p>
 <select name="user_spec" id="user_spec" />
 </form>
 <script>
 function ADDLISTITEM()
 {// this script suffers from errors on eval/JSON.parse methods
 alert (json.length);//outputs corrcet with eval 
 tring = JSON.stringify(json);//outputs corrcet with eval
 alert(jsonString);//outputs corrcet with eval
 alert(json.options[0]);//no output
 }
 </script>
 <script src="http://code.jquery.com/jquery-latest.min.js">    
 </script>
 <script src="http://www.json.org/json2.js"></script>
 <script>
 var json;
 $(document).ready(function() { 
 jQuery .getJSON("http://127.0.0.1/conn_mysql.php", function (jsonData) {
 json = eval(jsonData);
 //json = JSON.parse(jsonData);/*error if uncomment:"IMPORTANT: Remove this line from  
                               json2.js before deployment"*/
 $.each(jsonData, function (i, j) {
 document.index.user_spec.options[i] = new Option(j.options);
 });});
 });
 </script>
 </body>
 </html>

3 个答案:

答案 0 :(得分:3)

在jQuery中,使用已解析的JSON数据调用$ .getJSON()的回调;只是使用它。

$.getJSON("*.php", function(data) {
   $.each(data, function() { alert(this.options); });
);

应该为数组中的每个{“options”:“xyzzy”}对象提供警报。

OP编辑帖子后

编辑: 你的编辑澄清了一些事情:你不会得到任何数据 - 它也会完全沉默,因为我发现了 - 如果你违反same origin policy。< / p>

基本上(有例外(预检检查等)),您只能通过AJAX 访问完全相同的域上的URL。如果您的HTML文件是本地提供的静态文件,则无法访问http://127.0.0.1/;如果您的文件是http://foo.baz.quux.org/,则不能简单地将AJAX转换为http://mordor.baz.quux.org

答案 1 :(得分:0)

var json = [{"options":"smart_exp"}, {"options":"user_int"}, {"options":"blahblah"}]

for (var i = 0; i < json.length; i++){

    alert(json[i].options)

}

答案 2 :(得分:0)

我不认为这里的问题与eval / parse等或同一原始政策有关。您的json是一个对象数组,每个对象都包含一个名为options的成员。因此,您无法执行json.options[0],必须执行json[0].options