欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django使用AJAX向服務(wù)器發(fā)起請求的操作方法

 更新時間:2024年05月21日 11:29:31   作者:wanghuizheng  
AJAX是一種用于創(chuàng)建交互式網(wǎng)頁應(yīng)用程序的技術(shù),它允許在不重新加載整個頁面的情況下向服務(wù)器發(fā)送和接收數(shù)據(jù),本文給大家介紹Django使用AJAX向服務(wù)器發(fā)起請求的操作方法,感興趣的朋友跟隨小編一起看看吧

什么是AJAX?

AJAX(Asynchronous JavaScript and XML)是一種用于創(chuàng)建交互式網(wǎng)頁應(yīng)用程序的技術(shù),它允許在不重新加載整個頁面的情況下向服務(wù)器發(fā)送和接收數(shù)據(jù)。通過 AJAX,網(wǎng)頁可以異步地向服務(wù)器發(fā)起請求并在后臺進行處理,然后在不刷新頁面的情況下更新頁面的部分內(nèi)容。

具體來說,AJAX 主要由以下幾個核心技術(shù)組成:

  • JavaScript:AJAX 的核心是 JavaScript,它負責(zé)在客戶端(瀏覽器)發(fā)起請求、處理響應(yīng),并更新頁面的內(nèi)容。
  • XMLHttpRequest對象(XHR):XHR 是在 JavaScript 中用于向服務(wù)器發(fā)起 HTTP 請求和接收響應(yīng)的對象。通過 XHR,JavaScript 可以在后臺與服務(wù)器進行通信,獲取數(shù)據(jù)并更新頁面。
  • HTML(或XML):通常情況下,服務(wù)器響應(yīng)會以 HTML 或 XML 格式返回數(shù)據(jù)。HTML 格式的響應(yīng)可以直接用于更新頁面的內(nèi)容,而 XML 格式的響應(yīng)通常需要 JavaScript 進行解析后再進行處理。
  • CSS:有時候,也會使用 CSS 來實現(xiàn)頁面的動態(tài)效果,以增強用戶體驗。

AJAX 技術(shù)的主要優(yōu)點包括:

  • 提升用戶體驗:通過異步加載數(shù)據(jù),可以減少頁面的加載時間和帶寬消耗,從而提升用戶體驗。
  • 減少服務(wù)器負載:不需要重新加載整個頁面,可以減少服務(wù)器的請求量,降低服務(wù)器負載。
  • 增強頁面交互性:可以在不刷新整個頁面的情況下動態(tài)地更新頁面的部分內(nèi)容,增強了頁面的交互性和實時性。

總的來說,AJAX 技術(shù)使得網(wǎng)頁能夠更快速、更動態(tài)地與用戶交互,為用戶提供更加流暢和友好的使用體驗。

實例

在網(wǎng)頁頁面有一個信息列表,點擊列表中的編輯圖標(biāo)后,向服務(wù)器發(fā)送請求,由視圖函數(shù)處理后,更新數(shù)據(jù)庫記錄,并且刷新頁面。

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>還沒有設(shè)置欄目,太懶了。</p>
    {% endfor %}
    </table>
<script>
    function edit_column(element, columnId) {
        // 獲取當(dāng)前行的文檔名稱單元格
        const currentRow = element.closest('tr');
        const nameCell = currentRow.querySelector('td:nth-child(2)');
        // 獲取當(dāng)前文檔名稱
        const currentName = nameCell.textContent;
        // 彈出 Prompt 對話框,獲取新的文檔名稱
        const newName = prompt('請輸入新的欄目名稱:', currentName);
        // 如果用戶點擊了確定并輸入了新名稱,更新表格中的文檔名稱
        if (newName !== null && newName.trim() !== '') {
            const trimmedName = newName.trim();
            // 發(fā)送 AJAX 請求更新數(shù)據(jù)庫,在fetch后支出了提交的url,由該url確定由那個view函數(shù)處理提交
            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
                                }) //發(fā)送到后臺的是一個字典,鍵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) {
        // 實現(xiàn)刪除功能的邏輯
        console.log('刪除欄目 ID:', columnId);
    }
    // 獲取 CSRF token 的函數(shù)(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函數(shù)如下

@csrf_exempt
@login_required
def update_column(request):
    if request.method == 'POST':
        try:
            data = json.loads(request.body)
            current_name = data.get('current_name') #提交數(shù)據(jù)字典中的current_name
            new_name = data.get('new_name') #提交數(shù)據(jù)字典中的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'),

到此這篇關(guān)于Django使用AJAX向服務(wù)器發(fā)起請求的文章就介紹到這了,更多相關(guān)Django服務(wù)器發(fā)起請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論