1. 程式人生 > >Django & JavaScript 用Ajax實現JSON數據的請求和響應

Django & JavaScript 用Ajax實現JSON數據的請求和響應

UNC else admin ros cat nbsp ejs -c var

【描述】

1.Server端定義了兩個字段:Article.title 和 Article.content

2.客戶端用JavaScript Ajax異步加載請求服務器的JSON數據

效果是點擊按鈕從服務器的數據庫取得第一篇文章的標題

【實現】

網頁端:

{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function loadXMLDoc(){
    var xmlhttp;
    if (window.XMLHttpRequest){
        
// IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行代碼 xmlhttp=new XMLHttpRequest(); } else{ // IE6, IE5 瀏覽器執行代碼 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){
//取到的內容:一個JSON對象。相當於一個python的列表,列表裏面是嵌套的字典 //[{"model": "cmdb.article", "pk": 1, "fields": {"title": "\u7b2c\u4e00\u4e2a\u6807\u9898", "content": "\u7b2c\u4e00\u6761\u5185\u5bb9\uff01\uff01\uff01"}}] var ret=JSON.parse(xmlhttp.responseText) //這裏用.來取得對象的內容,之前沒有考慮到是列表一直出現undefined的錯誤!
document.getElementById("myDiv").innerHTML=(ret[0].fields.title); } } //這裏url在django裏面定義了,會用views.py裏面的sendjson方法來處理請求 xmlhttp.open("GET","/thejson/",true); xmlhttp.send(); } </script> </head> <body> <div id="myDiv"><h2>使用 AJAX 修改該文本內容</h2></div> <button type="button" onclick="loadXMLDoc()">修改內容</button> </body> </html>

Django服務端:

#Views.py

from
django.shortcuts import render from django.http import HttpResponse,JsonResponse from django.core import serializers import json from . import models # Create your views here. def sendjson(request): articles= models.Article.objects.all() data= serializers.serialize("json", articles) print(data) #抄別人的寫法。 return HttpResponse(data,content_type="application/json") def hello(request): return render(request,index.html,locals())

#urls.py

from django.contrib import admin
from django.urls import path
from cmdb import views

urlpatterns = [
    path(admin/, admin.site.urls),
    path(index/, views.hello),
    path(thejson/,views.sendjson),
]

#Models.py

from django.db import models

# Create your models here.
class Article(models.Model):
    title=models.CharField(max_length=32,default=‘‘)
    content=models.TextField(null=True)

    #這裏可以讓admin後臺的文章列表顯示正確的文章標題
    def __str__(self):
        return self.title

Django & JavaScript 用Ajax實現JSON數據的請求和響應