2013-04-10 18 views
0

正如标题所说,我试图从django向javascript传递一组MySQL查询结果。不幸的是,我的页面源代码显示了一个包含看起来是查询结果的字符串数组。这里是我的Django代码:试图从Django向Javascript传递查询结果数组

resultFEs = [] 
for result in results: 
    fes = FrameElements.objects.filter(frame_name=result.name) 
    resultFEs.append(serializers.serialize('json', fes)) 
results_json = serializers.serialize('json', results) 

return render_to_response('newInstance.html',{'scene_id':scene_id,'corpus_id':corpus_id,'sentence_id':sentence_id,'word':word,'word_position':word_position,'results':results_json,'resultFEs':resultFEs}) 

这里是我的html:

<script type="text/javascript"> 
    var word = '{{word}}'; 
    var wordPosition = '{{word_position}}'; 
    var sceneId='{{scene_id}}'; 
    var corpusId='{{corpus_id}}'; 
    var sentenceId='{{sentence_id}}'; 
    var results ={{results|safe}}; 
    var resultFEs={{resultFEs|safe}}; 
</script> 

这里是生成的页面源:

<script type="text/javascript"> 
     var word = ' the '; 
     var wordPosition = '0:0'; 
     var sceneId='1'; 
     var corpusId='1'; 
     var sentenceId='2'; 
     var results =[{"pk": 1, "model": "annotation_tool.frames", "fields": {"framenet_id": 234234, "name": "Using", "frame_type": "FRAMENET", "timestamp": null, "has_lexicalization": 1, "annotator": 19, "semiotic_status": "LITERAL"}}, {"pk": 2, "model": "annotation_tool.frames", "fields": {"framenet_id": 234234, "name": "Use_computer", "frame_type": "FRAMENET", "timestamp": null, "has_lexicalization": 1, "annotator": 19, "semiotic_status": "LITERAL"}}]; 
     var resultFEs=['[{"pk": 1, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Agent", "frame": 1, "framenet_id": null, "frame_name": "Using", "core_status": "CORE"}}, {"pk": 2, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Instrument", "frame": 1, "framenet_id": null, "frame_name": "Using", "core_status": "CORE"}}, {"pk": 13, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Self", "frame": 1, "framenet_id": null, "frame_name": "Using", "core_status": "CORE"}}]', '[{"pk": 3, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Agent", "frame": 2, "framenet_id": null, "frame_name": "Use_computer", "core_status": "CORE"}}, {"pk": 4, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Computer", "frame": 2, "framenet_id": null, "frame_name": "Use_computer", "core_status": "CORE"}}, {"pk": 14, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Self", "frame": 2, "framenet_id": null, "frame_name": "Use_computer", "core_status": "CORE"}}, {"pk": 19, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Desk", "frame": 2, "framenet_id": null, "frame_name": "Use_computer", "core_status": "CORE"}}, {"pk": 20, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Chair", "frame": 2, "framenet_id": null, "frame_name": "Use_computer", "core_status": "CORE"}}, {"pk": 21, "model": "annotation_tool.frameelements", "fields": {"fe_name": "Chair", "frame": 2, "framenet_id": null, "frame_name": "Use_computer", "core_status": "CORE"}}]']; 
</script> 

注意如何在结果页面的源代码,有在resultFE的每个元素周围加引号。基本上,我不希望这些引号出现,这样我就有了一个json对象的二维数组,而不是一个一维的字符串数组。

在此先感谢!

回答

0

如果你使用jQuery,您可以将字符串安全地转换为使用parseJSON方法的JSON对象:

var resultFEs = jQuery.parseJSON({{resultFEs|safe}}); 

见parseJSON文档:http://api.jquery.com/jQuery.parseJSON/

+0

代码替换您所提供导致resultFEs是空值。我也尝试循环遍历我原来的代码的resultFE,并设置每个元素等于调用jQuery.parseJSON本身的结果,但是这并没有改变任何东西,因为数组而不是JSON对象本身在引号中。 – user1971355 2013-04-10 02:38:26

+0

抓痕!遍历数组并调用parseJSON确实可行!所以,你的建议几乎是正确的。谢谢一堆! – user1971355 2013-04-10 02:54:55