为什么JavaScript不显示已解析的json数据?
这是JSON数据的格式:[{“options”:“smart_exp”},{“options”:“user_int”},{“options”:“blahblah”}],我通过getjson从服务器接收这些数据。我需要用用户输入附加json。我尝试这样做:首先将其转换为javascript对象,将其附加用户输入,再次转换为json对象并将其发送回服务器进行数据库更新。我已经使用eval()将json转换为javaScript对象。现在无法操作javascript对象。若我将javascript对象转换回json对象,它将正确显示从服务器发送的所有数据为什么JavaScript不显示已解析的json数据?,javascript,json,eval,Javascript,Json,Eval,这是JSON数据的格式:[{“options”:“smart_exp”},{“options”:“user_int”},{“options”:“blahblah”}],我通过getjson从服务器接收这些数据。我需要用用户输入附加json。我尝试这样做:首先将其转换为javascript对象,将其附加用户输入,再次转换为json对象并将其发送回服务器进行数据库更新。我已经使用eval()将json转换为javaScript对象。现在无法操作javascript对象。若我将javascript对象
<!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>
函数ADDLISTITEM()
{//此脚本在eval/JSON.parse方法上出现错误
警报(json.length);//使用eval输出correct
stringify(JSON);//使用eval输出correct
警报(jsonString);//输出与eval一致
警报(json.options[0]);//无输出
}
var-json;
$(文档).ready(函数(){
jQuery.getJSON(“http://127.0.0.1/conn_mysql.php,函数(jsonData){
json=eval(jsonData);
//json=json.parse(jsonData);/*取消注释时出错:“重要:从
部署前的json2.js“*/
$.each(jsonData,function(i,j){
document.index.user_spec.options[i]=新选项(j.options);
});});
});
var json=[{“选项”:“智能”},{“选项”:“用户”},{“选项”:“blahblah”}]
for(var i=0;i
var json=[{“选项”:“智能”},{“选项”:“用户”},{“选项”:“blahblah”}]
for(var i=0;i
在jQuery中,使用解析的JSON数据调用$.getJSON()的回调函数;就用它吧
$.getJSON("*.php", function(data) {
$.each(data, function() { alert(this.options); });
);
应该为数组中的每个{“options”:“xyzy”}对象发出警报
编辑OP编辑他们的帖子后:
您的编辑稍微澄清了一点:如果您违反了
基本上(除了例外(飞行前检查等),您只能通过AJAX访问完全相同域上的URL。如果您的HTML文件是本地提供的静态文件,则无法访问;如果您的文件是,您不能简单地将AJAX转换为。在jQuery中,将使用解析的JSON数据调用$.getJSON()的回调;就用它吧
$.getJSON("*.php", function(data) {
$.each(data, function() { alert(this.options); });
);
应该为数组中的每个{“options”:“xyzy”}对象发出警报
编辑OP编辑他们的帖子后:
您的编辑稍微澄清了一点:如果您违反了
基本上(除了例外(飞行前检查等),您只能通过AJAX访问完全相同域上的URL。如果您的HTML文件是本地提供的静态文件,则无法访问;如果您的文件是,您不能简单地将AJAX插入。我认为这里的问题与eval/parse等或同源策略无关。json是一个对象数组,每个对象包含一个名为options的成员。因此,您不能执行
json。选项[0]
,您必须执行json[0]。选项
我认为这里的问题与eval/parse等或同源策略无关。json是一个对象数组,每个对象包含一个名为options的成员。因此,您不能执行json。选项[0]
,您必须执行json[0]。选项
您的HTML代码有点崩溃……不要使用eval()解析json。使用JSON.parse(),并包含此文件以实现旧浏览器兼容性:除了Golmote的建议:1。使用doctype,2。脚本元素上不需要语言和类型属性,3。考虑使用大写函数名仅用于构造函数4的约定。在声明使用这些变量的全局函数之前,请考虑声明全局变量5。使用小写标记名6。考虑将脚本元素放置在页面底部(右前),如果我使用JSON.PARSE(JSONDATA),脚本将停止工作。i、 e.未填充dropdwon列表&json.length也未显示任何结果。它显示此警报,“重要提示:在部署之前从json2.js中删除此行”如果我删除包含,警告消息将消失。它可以工作,即使用eval()执行json.length,但json.pase()会停止工作,甚至会填充列表。我编辑了代码以了解如何使用JSON.parse您的HTML代码有点崩溃……不要使用eval()解析JSON。使用JSON.parse(),并包含此文件以实现旧浏览器兼容性:除了Golmote的建议:1。使用doctype,2。脚本元素上不需要语言和类型属性,3。考虑使用大写函数名仅用于构造函数4的约定。在声明使用这些变量的全局函数之前,请考虑声明全局变量5。使用小写标记名6。考虑将脚本元素放置在页面底部(右前),如果我使用JSON.PARSE(JSONDATA),脚本将停止工作。i、 e.未填充dropdwon列表&json.length也未显示任何结果。它显示此警报,“重要提示:在部署之前从json2.js中删除此行”如果我删除包含,警告消息将消失。它可以工作,即使用eval()执行json.length,但json.pase()会停止工作,甚至会填充列表。我编辑了代码以了解如何使用JSON.parse。实际上,我需要使用此脚本将JSON数据(从服务器接收并构建一个下拉列表)与用户输入一起追加,然后将其发送回服务器以保存并发送一组新的更新JSON以进行渲染。通过回声/警报,我试图看到我接收到数据并对其进行操作。我编辑了代码。对我的答案进行了澄清。你能告诉我在这场冲突中的解决方案吗。但是正如我上面所说的,这个列表由服务器数据填充&eval还将json解析为javascript