javascript - Django + Ajax |文件上传 |服务器不识别 Ajax 请求

标签 javascript jquery python ajax django

我正在尝试使用 ajax with Django 实现文件上传但面临一些问题。

当用户在选择文件并提交表单后尝试上传文件时,根据我的理解,应该使用 POST 将 ajax 请求发送到服务器方法,但在我的例子中是 POST正在向服务器发出请求,但服务器无法将其识别为 ajax 请求,浏览器被重定向到 http://<server>:<port>/upload/本页内容如下。

{"status": "error", "result": "Something went wrong.Try Again !!"}

Django 版本:1.6.2

Python 版本:2.7.5

此外,在 Django 开发服务器上进行测试。

views.py

def upload(request):
        logging.info('Inside upload view')
        response_data = {}
        if request.is_ajax():
                logging.info('Is_AJAX() returned True')
                form = UploaderForm(request.POST, request.FILES)

                if form.is_valid():
                        logging.info('Uploaded Data Validated')
                        upload = Upload( upload=request.FILES['upload'] )
                        upload.name = request.FILES['upload'].name
                        upload.save()
                        logging.info('Uploaded Data Saved in Database and link is %s' % upload.upload)

                        response_data['status'] = "success"
                        response_data['result'] = "Your file has been uploaded !!"
                        response_data['fileLink'] = "/%s" % upload.upload

                        return HttpResponse(json.dumps(response_data), content_type="application/json")

        response_data['status'] = "error"
        response_data['result'] = "Something went wrong.Try Again !!"

        return HttpResponse(json.dumps(response_data), content_type='application/json')

模板

<form id="uploadForm" action="/upload/" method="post" enctype="multipart/form-data">
                {% csrf_token %}
<input id="fileInput" class="input-file" name="upload" type="file">
<input type="submit" value="Post Images/Files" />
</form>

Javascript 1:

$('#uploadForm').submit(function(){

        var formData = new FormData($(this)[0]);
        $.ajax({
                url: '/upload/',
                type: 'POST',
                data: formData,
                async: false,
                success: function (data) {
                alert(data)
                },
                cache: false,
                contentType: false,
                processData: false
        });
        return false;
});

Javascript 2

var options = {
      url: '/upload/',
      type: "POST",
       error: function(response) {
               alert('Something went Wrong. Try Again');
        },
        success: function(response) {
            if ( response.status == 'success' ) {
              alert('success');
             }
        }
};

$('#uploadForm').ajaxSubmit(options);

问题:

1) 为什么Django 无法识别request.is_ajax() 的ajax 请求和值?总是 False .

2) 即使服务器无法识别 ajax 请求,为什么我的浏览器会被重定向到另一个页面?

还有一个类似的问题here但没有结果。

最佳答案

这对我有用。你需要一个 jquery.form.js

$("#uploadForm").submit(function(event) {
    $(this).ajaxSubmit({
        url:'{% url upload_file %}',
        type: 'post',
        success: function(data) {
            console.log(data)
        },
        error: function(jqXHR, exception) {
            console.log("An error occurred while uploading your file!");
        }
    });
    return false;
});

这是类似的问题 here有答案。

关于javascript - Django + Ajax |文件上传 |服务器不识别 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970121/

相关文章:

javascript - 将 Shadertoy 转换为我自己的本地 Three.js 沙箱

javascript - PHP在不访问网站的情况下执行网站代码

python - 对给定列的 numpy 矩阵进行排序

javascript - node.js 中的 path.join(__dirname , 'views' ) 和 path.join(__dirname + 'views' ) 之间的区别

javascript - 不处理 dojo 请求之前的 Dojo 方面

javascript - 在页面加载时在 Ext.grid 上显示排序箭头

javascript - jQuery SlideDown() 不等待动画延迟

php - 添加时间(HH :MM) to <li> tags through jquery

python - Leetcode最长公共(public)前缀运行时错误

python - 在列表中找到非唯一值时接收错误代码