2017-08-01 71 views
1

我正在爲一個更大的項目編寫一個小測試應用程序。我想異步使用FileReader()從客戶端讀取一個txt文件,並通過使用AJAX將文本體傳遞給Django服務器。當服務器成功獲取「發佈」文本時,它將返回文本的長度。它在服務器上運行良好,我得到了我的預期。但是現在我想將文本的大小(長度)傳回給客戶端,並將其異步顯示在網頁的某個位置。但是失敗了......這是我的代碼:AJAX可以訪問Django HttpResponse變量

HTML

<script type="text/javascript"> 
    var render_text = function(csvFile, onLoadCallback){ 
     var reader = new FileReader(); 
     reader.onload = onLoadCallback; 
     reader.readAsText(csvFile); 
    } 

    $(document).ready(function(){ 

     $("#id_csvFileInput").on("change", function(e){ 
      render_text(this.files[0], function(e){ 
       var text = e.target.result; 
       $.ajax({ 
        url: "", 
        type: 'POST', 
        async: true, 
        data: {'text': text}, 
        success: function(data){ 
         $("#id_test").text(data.size); 
        } 
       }); 
      }); 
     }); 
    }); 

</script> 

<p> 
    <input type="file" name="csvFileInput" id="id_csvFileInput" accept=".csv"> 
</p> 

<div> 
    <p>Waiting for reponse context....</p> 
    <span id="id_test">?</span> 
</div> 

View.py

# Home page. 
@csrf_exempt 
def home(request): 
    template = 'hbvapp/home.html' 
    context = {} 
    if request.method == "POST" and request.is_ajax(): 
     context['test'] = request.POST.get('text') 
     context['size'] = len(context['test']) 
     print context['size'] 
     return render(request, template, context) 
    else: 
     return render(request, template) 

任何幫助將十分讚賞! Reagards

回答

2

嘗試

from django.http import JsonResponse 

    if request.method == "POST" and request.is_ajax(): 
     context['test'] = request.POST.get('text') 
     context['size'] = len(context['test']) 
     print context['size'] 
     return JsonResponse(context) 
     #  ^^^^^ 

詳情jsonresponse

+0

OMG!完美工作。我是新的Web應用程序開發。我想對JQuery,AJAX和Json做更多的研究!非常感謝 ! –

1

你可以用這種方式也發送:

context['test'] = request.POST.get('text') 
context['size'] = len(context['test']) 
print context['size'] 
return HttpResponse(json.dumps(context), content_type='application/json') 

,並在你的js,你可以這樣訪問:

success: function(data){ 
        $("#id_test").text(data['size']); 
       } 
+0

Thx男人,它的作品^^ –