原生AJAX例子(數(shù)據(jù),文件上傳)

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^test/$', views.test, name='test'),
    url(r'^ajax_test/', views.ajax_test, name='ajax_test'),
]
```javascript
template-ajax_test.html
```javascript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<input type="text" id="a1">
<input type="file" id="a2">
<input type="button" value="點擊" onclick="ajax1()">
</body>
<script src="/static/jquery.js"></script>
<script type="text/javascript">

  function getXHR(){
            var xhr = null;
            if(XMLHttpRequest){
                xhr = new XMLHttpRequest();
            }else{
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            return xhr;
            }

    function ajax1(){

        var a1 = document.getElementById('a1').value;   #獲取input的值
        var fileobj = document.getElementById('a2').files[0];
        var fd = new FormData();
        fd.append('user', a1);
        fd.append('img', fileobj);        

        //var xhr = new XMLHttpRequest();
          var xhr = new getXHR();
        xhr.open('POST' ,'/ajax_test/', true);
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4){
                var obj = JSON.parse(xhr.responseText);
                console.log(obj);
            }
        };
************************************************************
        //xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
        //xhr.send("user=root/pass=123"); #如果send傳字符串,必須加上面的請求頭, 如果傳對象借助FormData,且不用加請求頭
***********************************************************
        xhr.send(fd);
    }
</script>
</html>

views.py

def test(request):
    return render(request, 'ajax_test.html')

def ajax_test(request):
    res = {'status': True, 'data': 'ok'}
    if request.method == 'POST':
        print request.POST.get('user')
        img = request.FILES.get('img')

        import os
        file_path = os.path.join('static', img.name) 拼接成 static/xx.jpg

        with open(file_path, 'wb') as f:
            for i in img.chunks():
                f.write(i)
 ***********************************************************        
        import json
        return HttpResponse(json.dumps(res))
************************************************************

1.原生XMLHttpRequest傳送數(shù)據(jù),send()發(fā)送的是字符串,而且必須使用setRequestHeader設(shè)置信息請求頭.
2.FormData對象介質(zhì)傳送數(shù)據(jù),通過append將(可以看為元組信息)信息傳入,然后send(),但send對象為form對象,此種方式不需要設(shè)置信息請求頭.
3.特別需要注意的一點:如果使用GET方式,需要設(shè)置URL,字符串方式.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識,涉及內(nèi)容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker閱讀 13,752評論 2 18
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • Ajax和XMLHttpRequest 我們通常將Ajax等同于XMLHttpRequest,但細(xì)究起來它們兩個是...
    changxiaonan閱讀 2,283評論 0 2
  • ajax作為前端開發(fā)必需的基礎(chǔ)能力之一,你可能會使用它,但并不一定懂得其原理,以及更深入的服務(wù)器通信相關(guān)的知識。在...
    蕭玄辭閱讀 844評論 0 0
  • Ajax:Asynchronous JavaScript + XML的簡寫。Ajax技術(shù)的核心是XMLHttpRe...
    exialym閱讀 889評論 0 8