我不是程序员,所以我不能去Django或Jquery的源代码,弄清楚这些函数如何以及为什么不返回我想要的东西,因为我根本不理解源代码
我为自己做了一个小项目,这是我对json部分的困惑: 这是我的django / python函数:
def searchPatients(request):
patients = Patients.objects.filter(KeyName__icontains=request.POST.get('KeyName'))
response = []
for patient in patients:
tmpvar = {}
tmpvar = { 'Name1':patient.Name1, 'Name2':patient.Name2 }
response.append(tmpvar)
return HttpResponse(json.dumps(response), content_type="application/json")
我检查了shell,json.dumps(回复)给了我这个:
'[{"Name2": "TestName2", "Name1": "TestName1"}, {"Name2": "TempName2", "Name1": "TempName1"}]'
从我这看起来不错。然后我不明白部分开始。这是我的JS / JQuery函数:
input_newRecord_Search.keyup(function() {
$.post('/edit/ajax_search_patients', { KeyName: $(this).val() }, function(data) {
var patients = jQuery.parseJSON(data);
for (var patient in patients) {
$('#searchResults ul').append('<li>'+patients[patient].Name1+'</li><li>+'patients[patient].Name2+'</li>');
};
}, "json");
});
我收到错误:“SyntaxError:JSON.parse:unexpected character”。 我检查了jquery从server获取的数据:console.log(data):
[{Name2: "TestName2", Name1: "TestName1"}, {Name2: "TempName2", Name1: "TempName1"}]
所以,据我所知,JSON语法看起来像 - {“key”:“value”}而且我在关键字段上缺少引号。我不明白为什么我会想念他们。例如,我可以手动通过正则表达式,但我不认为这是正确的方法。使用正则表达式我可以解析我的整个数据而不需要jQuery.parseJSON(),但我又想使用jQuery函数 - 毕竟它是为了这个目的而制作的。 任何人都可以帮我这个吗?
答案 0 :(得分:1)
诀窍是当你告诉jQuery.post
服务器正在返回JSON 时,它会为你解析它。
// This line can be safely removed;
// jQuery is doing it for you behind the scenes
var patients = jQuery.parseJSON(data);
当您对已经解析的数据使用parseJSON
时,最终会尝试解析JavaScript对象的字符串表示形式。只需使用已经解析过的数据,一切都应该正常工作。
答案 1 :(得分:0)
jQuery会自动将json转换为js对象。你不需要自己打电话解析。