2013-02-08 59 views
0

我正在使用Django框架构建网站。将json格式变量转换为javascript数组

在Python文件(views.py)我发送到Javascript函数已被转化以JSON数据

的Python的数组:

json_data=[1,2,3] 
return HttpResponse(json.dumps(json_data), mimetype='application/json') 

然后,在Javascript我显示JSON数据在html中。

的JavaScript:

function get_variable(){ 

    $.get("/xhr_test/json/", function(json_data) { 
    $('.square').append('<p> ' + json_data + ' </p>');}); 
}; 

到目前为止,一切正常。不过,我想将我认为是字符串的“json_data”转换为数组。

我试着这样做:

function get_variable(){ 

    $.get("/xhr_test/json/", function(json_data) { 
    var array = json_data.split(','); 
    $('.square').append('<p> ' + array[0]+ ' </p>');}); 
}; 

不幸的是,这是行不通的。

有人可以请我解释我能做些什么来将“json_data”变量转换成JavaScript中的数组?

非常感谢。

+0

JSON是JavaScript对象符号的首字母缩写,所以你可以'JSON.parse(json_data);'来获取被作为一个字符串发送的数组/对象... – 2013-02-08 14:16:34

+0

我试图做“无功阵列= JSON.parse(json_data);“但后来我尝试打印“$('。square')。append('

'+ array [0] +'

');”并且它不起作用 – 2013-02-08 14:33:49

+1

当您尝试执行此操作时,浏览器控制台会说什么?发生了什么错误? “不起作用”是什么意思? – Trevor 2013-02-08 14:36:09

回答

1

当您在JSON格式的数据发送给它周围是一个字符串(主数据),但一个字符串格式化,以便于用原始类型恢复数据(即,你的数组)。 Javascript和jQuery有不同的方式来做到这一点。使用jQuery的getJSON可能是最直接的:

http://api.jquery.com/jQuery.getJSON/

您可以使用浏览器的JavaScript控制台,看看究竟是什么你的JS变量样子。

1

“这不起作用”太模糊了... 无论如何,如果我理解你的问题,你正在处理的是一个字符串,而不是JavaScript数组...你必须评估从ajax返回的数据拨打:

var theJavaScriptArray = eval('(' + json_data + ')'); 

或更好的......使用jQuery.ajax并指定JSON作为数据类型:jquery doc

+0

'Eval'? extra charac – Trevor 2013-02-08 14:36:43

+0

你想说什么? :P – daveoncode 2013-02-08 14:39:09

+0

在我看来他喜欢质疑你使用'eval';不能说我责怪他。 'JSON.parse'或者假设它总是一个数组数组,'String#split'会更有意义。 – 2013-02-08 15:15:21

1

最后,感谢Zah,我发现了“javascript控制台”,我不知道它存在。

我可以看到错误是“json_data”变量不是字符串。

因此,这是为我工作的解决方案:

function get_variable(){ 
    $.get("/xhr_test/json/", function(json_data) { 
    var b=json_data.toString().split(','); 
    $('.square').append('<p> ' + b[0] + ' </p>'); 
    }); 
}; 
0

有jQuery中的简写解析自动JSON字符串:jQuery.getJSON()

$.getJSON('/xhr_test/json/', function(data) { 
    console.log(data); // Here data is already a JavaScript object 
}); 

这基本上是一样的:

$.ajax({ 
    url: "/xhr_test/json/", 
    dataType: "json", 
    success: function(data) { 
     console.log(data); // Here data is already a JavaScript object 
    } 
}); 

这又是大致相同的:

$.ajax({ 
    url: "/xhr_test/json/", 
    success: function(data) { 
     var json = $.parseJSON(data); // Here data is a string 
     console.log(data); // And json is JavaScript object 
    } 
});