通过AJAX将JSON对象从Django视图返回给客户端

时间:2015-11-11 18:52:19

标签: json ajax django

基本上,我试图将原始SQL查询结果转换为JSON对象,然后通过AJAX将其发送到客户端。 这是我的观点(我使用 Django 1.8.6

import MySQLdb
from django.db import connection
import json
from django.http import HttpResponse
from django.core import serializers
def test_view(request):
      cursor = connection.cursor()
      cursor.execute("select id, name from okved")
      data = cursor.fetchall
      json_data = serializers.serialize('json', data)
      return HttpResponse(json_data, content_type="application/json")

各自的URLConf

url(r'^test/$', test_view),

JQuery函数

var test = function()
{
    $.ajax({
        type:"GET",
        url:"/test",
        dataType : 'json',
        cache: "false",
        data:{},
        success:function(response)
        {
            alert("Test successful");
        }
    });
    return true;
}

我经常遇到 GET http://127.0.0.1:8000/test/ 500(内部服务器错误)错误,因为我遵循了我之前遇到的所有建议。我真的很感激任何帮助。我试着在这上面冲浪Stackoverflow。

1 个答案:

答案 0 :(得分:3)

首先,500错误只是一个错误代码,django会给你堆栈跟踪函数堆栈中发生错误的位置,你应该学会读取它并找到错误发生的位置。

从您的代码中听起来好像您正在尝试使用serializers来序列化原始查询结果。这不起作用,因为原始结果是元组的元组,每个子元组是从数据库返回的记录。 Django serializers只擅长序列化从ORM查询的对象。您最好使用json.dumps()方法。这是你的views.py中的最后几行:

data = cursor.fetchall()
json_data = json.dumps(data)
return HttpResponse(json_data, content_type="application/json")

这里是django序列化程序的doc