0

我不是程序员,所以我无法查看 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(response) 给了我这个:

'[{"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:意外字符”。我检查了 jquery 从服务器获取的数据:console.log(data):

[{Name2: "TestName2", Name1: "TestName1"}, {Name2: "TempName2", Name1: "TempName1"}]

因此,据我所知,JSON 语法看起来像 - {"key":"value"} 并且我缺少关键字段上的引号。而且我不明白为什么我想念他们。例如,我可以通过正则表达式手动输入它们,但我认为这不是正确的方法。并且使用正则表达式我可以解析我的整个数据而不需要 jQuery.parseJSON(),但我想再次使用 jQuery 函数——毕竟它正是为此目的而制作的。谁能帮我解决这个问题?

4

2 回答 2

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 对象的字符串表示。只需使用已经解析的数据,一切都应该正常工作。

于 2013-10-25T07:26:24.437 回答
0

jQuery 会自动为您将 json 转换为 js 对象。您不需要自己调用 parse 。

于 2013-10-25T07:27:14.160 回答