【问题标题】:Django AJAX call: Referencing Table in JSDjango AJAX 调用:JS 中的引用表
【发布时间】:2014-12-30 15:13:36
【问题描述】:

有没有办法在我的 jquery AJAX 调用中引用包含数据库中数据的列表 (item_list = inventory.objects.order_by('name'))?

这是我的代码:

/models.py:

class phonebook(models.Model):
    name = models.Charfield(max_length=200)
    phone_number = models.CharField(max_length=100)

/views.py:

def phonebook_home(request):
    global phonebook
    phonebook = phonebook.objects.order_by('name')

def get_next_3_contacts(request):
    returnedContacts = phonebook[contactIndex:contactIndex+3]
    return HttpResponse(phonebook)

/main.js:

var = ajax_call {
    type: 'GET'
    url: DEFINED_URL 
    data: {
        index: contactIndex
    },
    dataType: 'html'
    success: function (returned, textStatus_ignored, jqXHR_ignored) {
        var contactIndex = 0
        function phonebook_list(name, phone_number) {
            "<li>" + name + " : " + phone_number + "</li>"
        }
        for(var index=0; index < 3; index++) {
            var name = phonebook[index].name
            var phone_number = phonebook[index].phone_number
            $("ul").append(phonebook_list(name, phone_number))
        }
        contactIndex += 3
     }

电话簿[index].name / .phone_number 在我的页面上返回“未定义”。我想将我的 js 文件与我的模板文件分开,因为这样我调试起来会更容易,但不幸的是,这个问题困扰了我。我还输入了一个警报来测试是否有任何数据从数据库返回,它只返回一个包含联系人姓名的字符串,联系人姓名之间没有空格。例如:“JaredSarahJohn”。

感谢所有帮助和任何建议!

【问题讨论】:

  • 你看到 ajax 回调接收的数据格式了吗?您必须对数据进行 json 编码(json.dumps)

标签: ajax django python-3.4 django-1.7


【解决方案1】:

为了使这个解决方案起作用,需要清理一些东西:

您认为global phonebook 将在get_next_3_contacts() 中可用的想法是不正确的。当您进行最终将调用get_next_3_contacts() 的AJAX 调用时,变量phonebook 不再可用。当对phonebook_home() 的调用完成时,它超出了范围。

解决办法是什么?更改 phonebook_home() 以接受偏移量和计数参数。让它进入数据库并返回请求的数量。这称为分页,您应该熟悉它!

def phonebook_home(request, offset, count):
    phonebook = phonebook.objects.all()[offset:offset+count]

但是我们如何将这些结果传递给您的 AJAX 处理程序?您不能只是将对象列表“返回”给HTTPResponse() 函数——它正在寻找要渲染的文本,而不是模型对象。

import json
from django.http import JsonResponse
def phonebook_home(request, offset, count):
    status = "OK"
    return_data = ""

    try:
        phonebook = phonebook.objects.all()[offset:offset+count]
        return_data = json.dumps(phonebook)
    exception:
        status = "UH OH"

    return JsonResponse({'data': return_data, 'status': status)

【讨论】:

  • 谢谢,抢。你的建议很有道理。我使用您提供的示例重构了我的代码,但它似乎没有返回任何内容。我是否也应该更改 js 中的某些内容?我还编辑了 name = 和 var phonenumber = 部分并输入了虚拟代码以查看它是否也能做任何事情,但它没有。 ul 上没有附加任何内容。
  • 使用浏览器的调试功能并尝试对控制台进行一些调试日志记录,以查看服务器返回的内容。控制台.log(返回);应该会给你一些答案!
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2020-03-25
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
相关资源
最近更新 更多