it编程 > 前端脚本 > Ajax

Django使用AJAX向服务器发起请求的操作方法

165人参与 2024-06-17 Ajax

什么是ajax?

ajax(asynchronous javascript and xml)是一种用于创建交互式网页应用程序的技术,它允许在不重新加载整个页面的情况下向服务器发送和接收数据。通过 ajax,网页可以异步地向服务器发起请求并在后台进行处理,然后在不刷新页面的情况下更新页面的部分内容。

具体来说,ajax 主要由以下几个核心技术组成:

ajax 技术的主要优点包括:

总的来说,ajax 技术使得网页能够更快速、更动态地与用户交互,为用户提供更加流畅和友好的使用体验。

实例

在网页页面有一个信息列表,点击列表中的编辑图标后,向服务器发送请求,由视图函数处理后,更新数据库记录,并且刷新页面。

1、html文件,及其中的脚本语言如下:

<table class="table table-hover">
    <tr>
        <td>序号</td>
        <td>栏目名称</td>
        <td>操作</td>
    </tr>
    {% for column in columns %}
    <tr>
        <td>{{ forloop.counter }}</td>
        <td>{{ column.column }}</td>
        <td>
            <a name="edit" href="javascript:" rel="external nofollow"  rel="external nofollow"  onclick="edit_column(this, {{ column.id }})">
                <span class="fas fa-pencil-alt"></span>
            </a>
            <a name="delete" href="javascript:" rel="external nofollow"  rel="external nofollow"  onclick="del_column(this, {{ column.id }})">
                <span class="fas fa-trash-alt" style="margin-left: 20px;"></span>
            </a>
        </td>
    </tr>
    {% empty %}
    <p>还没有设置栏目,太懒了。</p>
    {% endfor %}
    </table>
<script>
    function edit_column(element, columnid) {
        // 获取当前行的文档名称单元格
        const currentrow = element.closest('tr');
        const namecell = currentrow.queryselector('td:nth-child(2)');
        // 获取当前文档名称
        const currentname = namecell.textcontent;
        // 弹出 prompt 对话框,获取新的文档名称
        const newname = prompt('请输入新的栏目名称:', currentname);
        // 如果用户点击了确定并输入了新名称,更新表格中的文档名称
        if (newname !== null && newname.trim() !== '') {
            const trimmedname = newname.trim();
            // 发送 ajax 请求更新数据库,在fetch后支出了提交的url,由该url确定由那个view函数处理提交
            fetch(`/article/update-column/`, {
                method: 'post',
                headers: {
                    'content-type': 'application/json',
                    'x-csrftoken': getcookie('csrftoken')  // django 的 csrf token
                },
                body: json.stringify({
                                current_name: currentname,
                                new_name: trimmedname
                                }) //发送到后台的是一个字典,键current_name值是column的旧名称,键new_name值是column的新名称
            }).then(response => {
                if (response.ok) {
                    // 更新成功,更新表格中的文档名称
                    namecell.textcontent = trimmedname;
                    alert('栏目名称更新成功');
                } else {
                    // 更新失败,处理错误
                    alert('更新失败,请重试');
                }
            }).catch(error => {
                console.error('error:', error);
                alert('更新失败,请重试');
            });
        }
    }
    function del_column(element, columnid) {
        // 实现删除功能的逻辑
        console.log('删除栏目 id:', columnid);
    }
    // 获取 csrf token 的函数(django)
    function getcookie(name) {
        let cookievalue = null;
        if (document.cookie && document.cookie !== '') {
            const cookies = document.cookie.split(';');
            for (let i = 0; i < cookies.length; i++) {
                const cookie = cookies[i].trim();
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookievalue = decodeuricomponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookievalue;
    }
</script>

2、view函数如下

@csrf_exempt
@login_required
def update_column(request):
    if request.method == 'post':
        try:
            data = json.loads(request.body)
            current_name = data.get('current_name') #提交数据字典中的current_name
            new_name = data.get('new_name') #提交数据字典中的new_name
            changed_column = articlecolumn.objects.get(user = request.user, column=current_name)
            changed_column.column = new_name
            changed_column.save()
            return jsonresponse({'status': 'success'})
        except articlecolumn.doesnotexist:
            return jsonresponse({'status': 'error', 'message': 'articlecolumn not found'}, status=404)
        except exception as e:
            return jsonresponse({'status': 'error', 'message': str(e)}, status=500)
    return jsonresponse({'status': 'error', 'message': 'invalid request method'}, status=400)

3、url如下

path('update-column/', views.update_column, name='update_column'),

到此这篇关于django使用ajax向服务器发起请求的文章就介绍到这了,更多相关django服务器发起请求内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

解决Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"

06-01

AJAX实现文件上传功能报错Current request is not a multipart request详解

06-01

Ajax使用异步对象发送请求方案详解

05-28

BoostCompass( http_server 模块 | 项目前端代码 )

08-02

Failed to execute ‘setRequestHeader‘ on ‘XMLHttpRequest‘: String contains non ISO-8859-1 code point.

08-02

全开源图床系统源码

08-02

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论