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 
    } 
});